2012-01-09 3 views
1

를 통해 동적으로로드 양식을 작동하지 않습니다 어디서 나는 장애인 눈에 거슬리지 자바 스크립트 때 내가 jQuery를 아약스 통해 양식을로드하면검증 MVC 3.0에서 아약스

<key="UnobtrusiveJavaScriptEnabled" value="false" />

는 검증이 작동하지 않습니다 ! ($ .validator.unobtrusive.parse (ID)를 호출을 통해)을 사용할 때 눈에 거슬리지

alert(Sys.Mvc.FormContext.getValidationForForm($(this).closest('form')[0])); 

내가 해결책을 알고 하지만 내가 무엇을해야 비활성화 된 경우 ?? : 실제로 다음 코드는 null를 돌려줍니다

답변

0

왜 수동으로 만 유효성 검사를 해제할지 생각지 않습니다. 어쨌든, 당신의 문제는 눈에 거슬리지 않은 검증을 끄면 asp.net 도우미가 검증 기능에서 사용하는 데이터 속성을 출력하지 않는다는 것입니다.

내 제안은 <key="UnobtrusiveJavaScriptEnabled" value="false" />으로두고 jQuery 이벤트를 등록 취소하는 것입니다.

+0

몇 가지 문제가 있기 때문에 나는 눈에 잘 띄지 않습니다. 그래서 그것없이 해결책은 무엇입니까? –

+0

처음부터 직접 작성하십시오. – linkerro

1

Sys.Mvc.FormContext._Application_Load();도 호출했는지 확인하십시오.

예를 들어 보겠습니다.

보기 모델 :

public class MyViewModel 
{ 
    [Required] 
    public string Foo { get; set; } 
} 

컨트롤러 :

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Create() 
    { 
     return PartialView(new MyViewModel()); 
    } 

    [HttpPost] 
    public ActionResult Create(MyViewModel model) 
    { 
     return Content("thanks for submitting"); 
    } 
} 

보기 (Index.cshtml)

<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    $.get('@Url.Action("create")', function (result) { 
     $('#foo').html(result); 

     // That's the important bit that you were probably missing 
     Sys.Mvc.FormContext._Application_Load(); 

     $('form').submit(function() { 
      if (Sys.Mvc.FormContext.getValidationForForm(this).validate('submit').length > 0) { 
       return false; 
      } 
     }); 
    }); 
</script> 

<div id="foo"></div> 

동적로드 형태 (Create.cshtml)를 포함하는 부분 :

@model MyViewModel 

@{Html.EnableClientValidation(true);} 
@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(x => x.Foo) 
    @Html.EditorFor(x => x.Foo) 
    @Html.ValidationMessageFor(x => x.Foo) 
    <button type="submit">OK</button> 
} 

참고 : 분명히이 답변은 권장되는 jQuery unobtrusive 및 jQuery 유효성 검사 플러그인 대신에 완전히 폐기 된 Microsoft*.js 스크립트를 사용하려는 경우에만 유효합니다. 따라서 web.config에 <add key="UnobtrusiveJavaScriptEnabled" value="false"/>을 설정 한 경우에만 유효합니다.

+0

Sys.Mvc.FormContext._Application_Load()를 추가했습니다. 페이지로 이동하면 오류없이 실행되지만 아무것도 변경되지 않습니다! Sys.Mvc.FormContext.getValidationForForm (this) –

+0

@MahmoudMoravej에 도달하면 "Uncaught TypeError : undefined의 메서드 'validate'를 호출 할 수 없습니다. 코드를 표시하지 않아서 문제를 진단하기 어렵습니다. 나는 완전한 실례를 당신에게 제공해주었습니다. –

+0

어쩌면 문제는 "index.cshtml"페이지에있는 다른 양식 때문입니다. 어쨌든, 나는 Html.EnableUnobtrusiveJavaScript (true)를 호출하여 하나의 페이지에 눈에 거슬리지 않게 할 수 있다고 믿지 않는다. 그래서 나는 현 페이지에 대해 눈에 잘 띄지 않는 자바 스크립트 만 사용하도록 내 전략을 변경했습니다! ... –