2011-04-01 6 views
6

jquery unobtrusive validation과 함께 asp.net mvc 3을 사용하고 있습니다. 나는 최근에 표준 DataAnnotations에서 FluentValidation으로 바뀌 었으며 훌륭하게 작동합니다.중첩 (컬렉션) 속성에 대한 mvc clientside 유효성 검사

FluentValidation을 선택하는 주된 이유는 내 viewmodel에서 중첩 된 속성의 유효성을 검사해야했기 때문입니다 (그러나 다른 멋진 사용 이유가 있음을 알았습니다). 이렇게 접근하는 것은 괜찮습니다. FluentValidation를 사용

class Vm { 
    string Prop; 
    string AnotherProp; 
    IEnumerable<ElementsVm> Elements; 
} 

class ElementsVm { 
    bool Required; 
    string Id; 
    string Title; 
    string Value; 
} 

나는 ElementVm VM과에 대한 검증을 내 단위 테스트는 나에게 검증이 작동 서버 측면을 보여주는 녹색이다.

클라이언트 측 'Prop'및 'AnotherProp'이 작동 중입니다. 유효성 검사 규칙도 클라이언트 측에서 예상대로 실행되지만 (DataAnnontation과 마찬가지로) 모든 요소가 클라이언트 측 유효성 검사를 전혀받지 못합니다. - 내가 DOM을 검사하고 모든 데이터 - 발, 데이터 - 필수 등 속성이 누락 된 것을 볼 수 있습니다.

내보기에서 html을 생성하는 데 여러 가지 방법을 시도했지만 'Prop'및 'AnotherProp'은 Html.TextBoxFor (m => m.Prop)를 사용하여 생성되지만 내 요소는 부분 - 이것은 문제가 시작되는 곳입니다. 내가 Html.TextBoxFor (m => m.Value)를 선택하면 모든 Element Textbox는 동일한 이름/ID를 가지므로 Html.TextBox (Model.Id)를 사용하여 고유 ID/이름을 생성했지만 여전히 유효성 검사 속성을 사용하지 않으려 고 시도했습니다. .

그래서 내 senario를 작동시키는 방법이 있습니다. 조금 재 작성하는 데 신경 쓰지 않지만 FluentValidation이 내 HTML을 작성하기를 정말로 원합니다.

내 폴백 솔루션은 속성이있는 올바른 HTML을 생성하는 자체 HTML 도우미를 작성하는 것이지만 새로운 릴리스/패치가 FluentValidation에 적용될 때 해당 헬퍼를 계속 업데이트해야하므로 생각할만큼 빨라야합니다. jquery 유효성 검사 또는 mvc에서 두 링크.

var i = 0; 
foreach (var element in Model) 
{ 
    ViewData.TemplateInfo.HtmlFieldPrefix = "Elements[" + i.ToString() + "]"; 
    @Html.TextBoxFor(m => m.Value) 
    i++; 
} 

이 당신의 눈에 거슬리지 검증 속성을 당신에게 제공해야하며, 또한 작동합니다 : 당신의 부분에

답변

8

는 ElementsVM의 각 인스턴스 전에, 당신과 같이, ViewData.TemplateInfo.HtmlFieldPrefix를 사용하여 고유의 접두사를 설정해야합니다 기본 모델 바인더로

counsellorben

+0

고마워요! 이것은 효과가 있으며 답으로 표시해야합니다. – JustinP8

+1

또한, 루프 뒤에 입력이 있으면'ViewData.TemplateInfo.HtmlFieldPrefix = ""'를 재설정하는 것을 잊지 마십시오. – JustinP8

+0

@ JustinP8, @counsellorben, @Per : 나는 똑같은 문제를 겪고있다. 그러나 이것으로 해결하지 못했다. 내 중첩 된 컬렉션에 대한 EditorTemplates를 사용하고 있으며 모든 'input'태그의 'id'속성에 이미 해당/equivalent "Elements [0]"접두어가 붙어 있습니다. 'ViewData.TemplateInfo.HtmlFieldPrefix'는 알아두면 편리하지만 나에게 도움이되지는 않습니다. @ '데이터 값, 데이터가 필요한 속성 등이 누락되었습니다.'라고 언급했습니다. 나는 똑같은 것을 알아 챘다. – tkerwood

관련 문제