Mam Model z 4 właściwościami, które są typu string. Wiem, że możesz zweryfikować długość pojedynczej właściwości za pomocą adnotacji StringLength. Jednak chcę zweryfikować długość połączonych 4 właściwości.
W jaki sposób MVC to zrobić z adnotacją danych?
Pytam o to, ponieważ jestem nowy w MVC i chcę to zrobić we właściwy sposób przed stworzeniem własnego rozwiązania.
c#
.net
asp.net-mvc
asp.net-mvc-3
data-annotations
Danny van der Kraan
źródło
źródło
Odpowiedzi:
Możesz napisać niestandardowy atrybut walidacji:
a wtedy możesz mieć model widoku i ozdobić nim jedną z jego właściwości:
źródło
this.RuleFor(x => x.Foo).Must((x, foo) => x.Foo.Length + x.Bar.Length + x.Baz.Length < 20).WithMessage("The combined minimum length of the Foo, Bar and Baz properties should be longer than 20");
. Teraz spójrz na kod w mojej odpowiedzi, że musisz napisać z adnotacjami danych i powiedz mi, który z nich wolisz. Deklaratywny model walidacji jest bardzo słaby w porównaniu z modelem imperatywnym.IsValid
nazywa się tovalidationContext
jest null. Masz pojęcie, co zrobiłem źle? :-(Model samodzielnie zweryfikowany
Twój model powinien implementować interfejs
IValidatableObject
. Umieść swój kod walidacyjny wValidate
metodzie:Uwaga: to jest walidacja po stronie serwera . To nie działa po stronie klienta. Twoja walidacja zostanie przeprowadzona dopiero po przesłaniu formularza.
źródło
ExpressiveAnnotations daje Ci taką możliwość:
źródło
Aby poprawić odpowiedź Darina, może być nieco krótsza:
Model:
Zwróć uwagę, że wymagany jest komunikat o błędzie, w przeciwnym razie błąd będzie pusty.
źródło
Tło:
Walidacje modeli są wymagane w celu zapewnienia, że otrzymane przez nas dane są ważne i poprawne, abyśmy mogli dalej przetwarzać te dane. Możemy zweryfikować model w metodzie akcji. Wbudowane atrybuty walidacji to Compare, Range, RegularExpression, Required, StringLength. Jednak możemy mieć scenariusze, w których wymagaliśmy atrybutów walidacji innych niż wbudowane.
Niestandardowe atrybuty walidacji
Aby utworzyć niestandardowy atrybut walidacji, musisz wyprowadzić tę klasę z ValidationAttribute.
Mam nadzieję że to pomoże. Twoje zdrowie !
Bibliografia
źródło
Trochę późno na odpowiedź, ale kto szuka. Możesz to łatwo zrobić, używając dodatkowej właściwości z adnotacją danych:
To wszystko, to też jest naprawdę. Jeśli naprawdę chcesz wyświetlić w określonym miejscu również błąd walidacji, możesz dodać to w swoim widoku:
zrobienie tego w widoku może się przydać, jeśli chcesz przeprowadzić lokalizację.
Mam nadzieję że to pomoże!
źródło