Mam problem z użyciem StringLengthAttribute podczas sprawdzania poprawności mojego modelu przy użyciu Entity Framework i ASP.NET MVC3.Jak działa atrybut StringLengthAttribute?
Mój model jest oparty na encji Entity Framework, która ma częściową klasę, która używa atrybutu MetadataType, aby poinformować MVC, jakiego typu użyć podczas wyszukiwania metadanych. Jest to przedstawione w poniższym kodzie:
[MetadataType(typeof(PartMetadata))]
public partial class Part { }
class PartMetadata
{
[DisplayName("Part number")]
[Required(ErrorMessage="* Required")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "* Part numbers must be between 3 and 50 character in length.")]
public string Number { get; set; }
[StringLength(255, MinimumLength=3,
ErrorMessage="* Part descriptions must be between 3 and 255 characters in length.")]
public string Description { get; set; }
[DisplayName("Drawing required?")]
public bool DrawingRequired { get; set; }
}
Problem polega na tym, że pole opisu nie jest poprawnie sprawdzane. Używając poniższego kodu mój model jest sprawdzany jako OK i przekierowywany jest na stronę Indeksu kontrolera, nawet jeśli pole opisu jest puste.
if (ModelState.IsValid)
{
return RedirectToAction("Index");
}
else
{
return View();
}
Jeśli dodać RequiredAttribute na polu opisu wtedy mój model jest klasyfikowany jako w nieprawidłowym stanie, a moja forma jest przeładowane pokazując domyślną wiadomość o błędzie wymaganego atrybutu. Jeśli później edytuję pole opisu, to pojawi się komunikat o sprawdzaniu poprawności, który ustawiłem w atrybucie długości łańcucha.
Czy tak powinien wyglądać atrybut? Nie jest problemem dekorowanie właściwości za pomocą wymaganego atrybutu, ale wydaje się sprzeczne z intuicją, ponieważ pole nie jest wymagane. Chcę tylko upewnić się, że jeśli użytkownik wpisze coś, to mieści się w zakresie atrybutu długości łańcucha.
Jak rozumiem, jest to dokładnie działa, jak można oczekiwać, że. To jest właśnie sprawdzanie długości ciągu ***, jeśli ** użytkownik wpisze coś *. Jeśli * naprawdę * chcesz, żeby on/ona coś wpisał, [Wymagane] jest potrzebny, tak jak powiedziałeś. Jakie zachowanie szukasz? – Joao
Pozbawianie pustego pola jest traktowane jako ** zerowe ** i wtedy wyzwalacze atrybutów [Wymagane] uruchamiają się. – Joao