5

Poszukuję sposobu na wdrożenie dyskretnej, niestandardowej procedury sprawdzania poprawności w celu sprawnego sprawdzania poprawności. Zgodnie z documentation, nie wydaje się wskazywać, że obsługuje dyskretną walidację.Dyskretna weryfikacja niestandardowa/warunkowa za pomocą Fluent Validation

To samo dotyczy używania sprawdzania warunkowego (When/Unless). Widzę w ich MVC documentation, dyskretny walidacji nie jest obsługiwany z warunkowego i innych złożonych walidacji:

Zauważ, że FluentValidation będzie również współpracować z walidacji po stronie klienta ASP.NET MVC, ale nie wszystkie zasady są obsługiwane. Na przykład wszelkie reguły zdefiniowane przy użyciu warunku (w przypadku, gdy nie ma), niestandardowych sprawdzania poprawności lub wywołań do funkcji Must nie będą uruchamiane po stronie klienta. Poniższe zatwierdzające są obsługiwane na kliencie:

* NotNull/NotEmpty
* zestawienia (regex)
* InclusiveBetween (zakres)
* CreditCard
* Email
* EqualTo (porównanie równość cross-własność)
* Długość

Czy ktoś ma pojęcie, jak to uruchomić? Jeśli nie, czy istnieją inne opcje sprawdzania poprawności, które zapewniają lepszą obsługę dyskretnej weryfikacji niestandardowej/złożonej?

+0

Czy możesz podać konkretny przykład tego, co próbujesz osiągnąć/zweryfikować? Jaki jest twój dokładny scenariusz? –

+0

Cóż, po prostu za pomocą metody When/Unless nie działają dyskretnie, po wyjęciu z pudełka.Nawet gdybym znalazł rozwiązanie, które byłoby dla nich skuteczne, zbliżyłoby mnie to o krok. Prawdopodobnie, jeśli działa w warunkach warunkowych, takich jak When/Unless, prawdopodobnie działałby również z niestandardową weryfikacją. –

Odpowiedz

1

Podłączyłem FluentValidation do ASP.NET MVC 3 pomyślnie, postępując zgodnie z dokumentami Integration with ASP.NET MVC.

Prostym sposobem jest podłączenie FluentValidation w ramy MVC Validation w Global.asax Application_Start() jak poniżej:

FluentValidationModelValidatorProvider.Configure(); 

Następnie można ozdobić swoje klas POCO z atrybutem, określając walidator, których używają.

[Validator(typeof(PersonValidator))] 
public class Person { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public int Age { get; set; } 
} 

W moim przypadku, ja nie chcę tego robić (atrybuty użytku), i rzeczywiście potrzebne, aby potwierdzić tę samą klasę POCO przeciwko innym Validators, w zależności od zasad biznesowych.

Jeśli chcesz wybrać różne walidatory w ten sposób, wykonaj czynności opisane w "custom validator factory with an IoC container". Utwórz klasę podklasy FluentMvcValidatorFactory ValidatorFactoryBase, która implementuje interfejs IValidatorFactory. Własna fabryka weryfikatorów może obsługiwać wybór właściwego weryfikatora.

Próbowałem sprawdzić działanie walidacji po stronie klienta (tak się stało), ale wygląda na to, że jest ono również niezauważalne. Moje html jest wyjście wygląda tak:

<input type="text" value="" name="Email" id="Email" data-val-length-max="128" data-val-length="&amp;#39;Email&amp;#39; must be between 0 and 128 characters." data-val-email="&amp;#39;Email&amp;#39; is not a valid email address." data-val="true" class="text-box single-line"> 

Dopóki podłączyć go do MVC poprawnie, myślę dyskretny powinno działać.

W praktyce nie należy polegać wyłącznie na sprawdzaniu poprawności po stronie klienta lub używać go jedynie do wspomagania użytkownika podczas wprowadzania danych. Ostatecznie serwer musi zatwierdzić, ale możesz mieć swój kod po stronie serwera używać tych samych walidatorów FluentValidation.

+1

Dzięki za twój wpis. Właściwie sprawdzam poprawność standardową działającą dyskretnie, problem polega na tym, że warunkowe sprawdzania poprawności działają, lub niestandardowe sprawdzanie poprawności (gdzie tworzę własne reguły sprawdzania poprawności). –

+0

Widzę - więc chcesz zdefiniować niestandardowe reguły sprawdzania poprawności (warunkowe) za pomocą FluentValidation i czy te reguły są konwertowane na niestandardowe reguły jquery.unobtrusive.validation dla sprawdzania poprawności strony klienta? To nie jest obsługiwane. Więc wymagałoby to niestandardowego kodu, aby wypełnić lukę. Jak ważne jest posiadanie niestandardowych reguł po stronie klienta, a nie w postach serwera? Może to przesada. Jednym z powodów używania FluentValidation jest to, że piszesz mniej kodu - te same reguły sprawdzania poprawności na kliencie i serwerze. –

+1

Zgadzam się. Istnieje jednak wiele przypadków, w których sprawdzanie poprawności niektórych pól jest wymagane tylko w niektórych przypadkach (tj. Wymagają pól adresu wysyłki, jeśli pole wyboru "Takie same jak faktury" nie jest zaznaczone). Dla mnie wydaje się to powszechnym wymogiem, i jak powiedziałeś, nie chcę pisać osobnego sprawdzania poprawności dla tego, ponieważ dyskretna walidacja nie działa dla tych Kiedy/Unlessalsals. –

Powiązane problemy