2012-12-20 1 views
2

asp.net mvc3에서 눈에 띄지 않는 유효성 검사를 수행하려면이 좋은 게시물에 언급 된대로 @Html.BeginForm() HTML 도우미를 사용해야합니다. http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html.@ Html.BeginForm()을 사용하지 않고 눈에 잘 띄지 않는 검증이 asp.net mvc3에서 작동하지 않는 이유

도우미를 사용하지 않고 눈에 거슬리는 검증은 트리거되지 않습니다. 나는 그것을 확인할 수 있었다.

도우미 @Html.BeginForm()은 양식을 제출할 때 방해가되지 않는 유효성 검사가 실행되도록하기 위해 무엇을 설명 할 수 있습니까?

수동으로 어떻게 할 수 있습니까? (@Html.BeginForm()으로 전화하지 않고 눈에 보이는 유효성 검사가 가능합니까?)

$("#myform").valid()을 사용하여 눈에 거슬리지 않는 유효성 검사를 호출 할 수 있다는 것을 알고 있습니다. 그러나 헬퍼 뒤에있는 마법과 그것을 재현하는 방법을 알고 싶습니다.

답변

2

BeginForm (FormExtensionsclass의 경우 http://j.mp/WrmAyk 참조)을 호출하면 새 MvcForm 개체가 만들어집니다.

이 클래스의 생성자 (MvcForm 클래스의 경우 http://j.mp/Wrml6F 참조)를 보면 새로운 FormContext 개체 (_viewContext.FormContext = new FormContext();)가 생성됩니다.

HTML 도우미를 사용하여 입력, 텍스트 영역 또는 선택 항목을 렌더링 할 때 이 호출되면 모델 메타 데이터에서 유효성 검사 속성이 렌더링됩니다. 폼 내에하지 않는 한 검증 속성이 렌더링되지 왜

FormContext formContext = ViewContext.GetFormContextForClientValidation(); 
if (formContext == null) 
{ 
    return results; 
} 

이것은 :

GetUnobtrusiveValidationAttributes 방법 (Html ​​헬퍼 클래스의 http://j.mp/Wrn4oa 참조) FormContext 렌더링 속성 전에 null의 경우 확인합니다. @karaxuna가 제안하는 것처럼 '가짜'FormContext을 생성하여 이것을 얻을 수 있습니다.

+0

대답과 훌륭한 설명에 감사드립니다! –

2
보기에

쓰기이 그것을 작동합니다

ViewContext.FormContext = ViewContext.FormContext ?? new FormContext(); 

코드 (같은 관점에서) @ Html.Beginform 내부 때, HTML 요소의 유효성 검사 속성이 다른 경우, 메타 데이터에서 가지고있다, 그렇지 않습니다.

+0

+1 큰 답변을 위해! –

+0

당신은 환영합니다 :) – karaxuna

관련 문제