Jaka jest różnica w zachowaniu [MaxLength]
i [StringLength]
atrybutach?
O ile wiem (z wyjątkiem, który [MaxLength]
może zweryfikować maksymalną długość tablicy), są one identyczne i nieco nadmiarowe?
asp.net-mvc-3
ef-code-first
entity-framework-4.1
Nick Goloborodko
źródło
źródło
Odpowiedzi:
MaxLength jest używana dla Entity Framework, aby zdecydować, jak duże ma być pole wartości ciągu podczas tworzenia bazy danych.
Z MSDN:
StringLength to adnotacja danych, która będzie używana do sprawdzania poprawności danych wejściowych użytkownika.
Z MSDN:
źródło
MaxLengthAttribute
, podczas gdy EF rozpoznajeStringLengthAttribute
[MaxLength]
więc wyświetla się komunikat o błędzie?Kilka szybkich, ale niezwykle przydatnych dodatkowych informacji, których właśnie nauczyłem się z innego postu, ale nie mogę znaleźć dokumentacji (jeśli ktoś może udostępnić link do niej w witrynie MSDN, to byłoby niesamowite):
Komunikaty walidacyjne skojarzone z tymi atrybutami faktycznie zastąpią symbole zastępcze skojarzone z atrybutami. Na przykład:
Jeśli przekroczy limit znaków, wyświetli następujący komunikat: „Adres może mieć maksymalnie 100 znaków”
Znane mi symbole zastępcze to:
Wielkie dzięki dla Bloudraak za wstępne wskazanie tego.
źródło
Poniżej znajdują się wyniki, gdy używamy zarówno
[MaxLength]
i[StringLength]
atrybutów, wEF code first
. Jeśli użyjesz obu,[MaxLength]
wygrywa wyścig. Zobacz wynik testu wstudentname
kolumnie poniżej klasyźródło
Wszystkie dobre odpowiedzi ... Z punktu widzenia walidacji zauważyłem również, że MaxLength jest sprawdzana tylko po stronie serwera, podczas gdy StringLength jest sprawdzana również po stronie klienta.
źródło
MaxLengthAttribute oznacza Max. dozwolona długość tablicy lub ciągu danych
StringLengthAttribute oznacza min. i max. długość znaków, które są dozwolone w polu danych
Odwiedź http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/
źródło
Kolejnym punktem do zanotowania jest atrybut MaxLength, który możesz podać tylko maksymalny wymagany zakres, a nie minimalny wymagany zakres. Będąc w StringLength , możesz podać oba .
źródło
Rozwiązałem to, dodając poniższą linię w moim kontekście:
Jakoś mi się
[MaxLength]
to nie udało.źródło
Podczas używania atrybutu do ograniczenia maksymalnej długości danych wejściowych dla tekstu z formularza na stronie internetowej, StringLength wydaje się generować atrybut html maxlength (przynajmniej w moim teście z MVC 5). Wybór zależy od tego, w jaki sposób chcesz ostrzec użytkownika, że jest to maksymalna długość tekstu. Z atrybutem stringlength, użytkownik po prostu nie będzie mógł wpisać więcej niż dozwolona długość. Atrybut maxlength nie dodaje tego atrybutu html, zamiast tego generuje atrybuty walidacji danych, co oznacza, że użytkownik może pisać poza wskazaną długością, a zapobieganie dłuższemu wprowadzaniu zależy od walidacji w javascript, kiedy przechodzi do następnego pola lub kliknie przycisk Prześlij (lub jeśli javascript jest wyłączone, walidacja po stronie serwera). W takim przypadku użytkownik może zostać powiadomiony o ograniczeniu za pomocą komunikatu o błędzie.
źródło