2012-02-28 3 views
10

동적으로 생성 된 항목에 눈에 거슬리는 자바 스크립트 유효성 검사를 사용하려고합니다. 자바 스크립트 문제는 이미 다른 SO 질문에서 해결되었으며 여기서는 그렇지 않습니다.ASP.NET MVC 눈에 거슬리지 않는 유효성 검사 - 양식 컨텍스트가 필요한 이유는 무엇입니까?

이 경우 항목을 동적으로 만드는 것은 주 양식 외부에서 생성 된 빈 항목 하나를 복제하는 것입니다.

문제는 TextBoxFor, CheckBoxFor와 같은 HTML 도우미를 사용하면 ... html 양식 요소 외부에서 유효성 검사를 위해 필요한 속성 (예 : data-val-required)이 생성되지 않는다는 것입니다.

이미 MVC 소스 코드를 확인했으며 FormContext이 null 인 경우 빈 특성 목록을 반환하는 행이 있습니다. (예외는 없습니다)

왜?

답변

20

양식 컨텍스트를 수동으로 위조 할 수 있습니다.

@model MyViewModel 
@{ 
    ViewContext.FormContext = new FormContext(); 
} 

@Html.LabelFor(x => x.Foo) 
@Html.EditorFor(x => x.Foo) 
@Html.ValidationMessageFor(x => x.Foo) 

해당 입력 요소는 이제 data-* 특성을 민병대 것입니다 예를 들어 당신은 <form> 요소를 포함하지 않고있는 당신이 할 수있는 몇 가지 입력 요소를 다시 생성 할 수 AJAX를 사용하여 호출되는 몇 가지 부분보기가 있다면. 그러나 그것은 충분하지 않을 수도 있습니다. (AJAX를 사용하여) 새로 고치기 만한다면 <form>의 일부분 만 실제로을 호출하는 DOM의 양식 요소를 대체하지 않아도 충분하지 않습니다. 이 요소와 관련된 이전 유효성 검사를 제거해야합니다.

success: function(result) { 
    // we are replacing only a portion of the form 
    $('#somePartOfTheForm').html(result); 

    $('form').removeData('validator'); 
    $('form').removeData('unobtrusiveValidation'); 
    $.validator.unobtrusive.parse('form'); 
} 
+3

이 대답이 받아 들여집니다. – Marko

+0

야 ... 주위의 모든 요리법을 사용하여 여러 시간을 보낸 후 매력처럼 작동했습니다. 감사! – Romias

+0

배경 정보 더보기 : http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html – Jowen

관련 문제