Używam asp.net mvc 3 z niewymuszonym sprawdzaniem jquery. Niedawno zmieniłem standardową funkcję DataAnnotations na FluentValidation i działa doskonale.Sprawdzanie poprawności klienta mvc dla właściwości zagnieżdżonych (kolekcja)
Głównym powodem pobrania FluentValidation była potrzeba sprawdzenia poprawności zagnieżdżonych właściwości w moim viewmodelu (ale odkryłem, że istnieją inne fajne powody, dla których go używam), który wygląda tak (nie myśl, że to jest pseudo):
class Vm {
string Prop;
string AnotherProp;
IEnumerable<ElementsVm> Elements;
}
class ElementsVm {
bool Required;
string Id;
string Title;
string Value;
}
Korzystanie FluentValidation zrobię walidator dla Vm i ElementVm i moje testy jednostkowe są zielone, pokazując mi walidacji po stronie serwera pracuje.
Działa po stronie klienta, "Prop" i "AnotherProp" - moje reguły sprawdzania poprawności działają również zgodnie z oczekiwaniami klienta (tak jak w przypadku DataAnnontation), ale wszystkie moje elementy nie uzyskują żadnej walidacji po stronie klienta. - Sprawdzam dom i widzę, że brakuje wszystkich atrybutów data-val, danych-wymaganych itp.
Próbowałem różnych metod generowania html w moich widoków, ale "Prop" i "AnotherProp" są generowane przy użyciu Html.TextBoxFor (m => m.Prop), podczas gdy moje elementy są generowane w częściowe - tutaj zaczynają się problemy. Jeśli wybiorę Html.TextBoxFor (m => m.Value) wszystkie moje pola tekstowe elementów będą miały taką samą nazwę/identyfikator, więc próbowałem również użyć Html.TextBox (Model.Id), aby wygenerować unikalny identyfikator/nazwę, ale nadal nie ma właściwości sprawdzania poprawności .
Czy istnieje sposób, aby mój senario działał - nie mam nic przeciwko przepisywaniu go nieco, ale naprawdę chciałbym FluentValidation napisać dla mnie mój html.
Moim rozwiązaniem awaryjnym byłoby utworzenie własnych helperów HTML, które generowałyby poprawny HTML z atrybutami, ale to byłoby do bani, ponieważ musiałbym aktualizować tych pomocników, gdy nowe wydania/poprawki zostały wprowadzone do FluentValidation, sprawdzanie poprawności jquery lub link w mvc między tymi dwoma.
Dzięki! To działa i powinno być oznaczone jako odpowiedź. – JustinP8
Nie zapomnij również zresetować 'ViewData.TemplateInfo.HtmlFieldPrefix =" "' jeśli masz wejścia po pętli. – JustinP8
@ JustinP8, @counsellorben, @Per: Mam ten sam problem, ale to nie naprawiło. Używam programu EditorTemplates dla mojej kolekcji zagnieżdżonej i wszystkie atrybuty "id" tagu wejściowego są już poprzedzone odpowiednimi/odpowiednimi "Elementami [0]". "ViewData.TemplateInfo.HtmlFieldPrefix" jest przydatna, ale nie stanowi problemu dla mnie. @Per wspomniał, że brakuje "atrybutów danych, danych, itp.". Zauważyłem to samo. – tkerwood