У меня проблемы с использованием StringLengthAttribute при проверке моей модели с использованием Entity Framework и ASP.NET MVC3.
Моя модель основана на сущности Entity Framework, которая имеет частичный класс, который использует атрибут MetadataType, чтобы сообщить MVC, какой тип использовать при поиске метаданных. Это показано в коде ниже:
[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; }
}
У меня проблема в том, что поле описания не проверяется должным образом. Используя приведенный ниже код, моя модель подтверждена как OK, и я перенаправлен на страницу индекса моего контроллера, даже если поле описания оставлено пустым.
if (ModelState.IsValid)
{
return RedirectToAction("Index");
}
else
{
return View();
}
Если я добавлю RequiredAttribute в поле описания, моя модель классифицируется как недопустимая, и моя форма перезагружается, показывая сообщение об ошибке по умолчанию для обязательного атрибута. Если я впоследствии отредактирую поле описания, оно отобразит сообщение об ошибке проверки, которое я установил в атрибуте длины строки.
Так должен вести себя атрибут? Это не проблема, чтобы украсить свойства обязательным атрибутом, но кажется нелогичным, так как поле не является обязательным. Я просто хочу убедиться, что если пользователь что-то печатает, он попадает в диапазон атрибута длины строки.