У меня возникли проблемы с использованием 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; }
}
Проблема, с которой я столкнулась, заключается в том, что поле описания не проверяется правильно. Используя код ниже, моя модель проверяется как "ОК", и я перенаправляется на страницу "Индекс" моего контроллера, даже если поле описания оставлено пустым.
if (ModelState.IsValid)
{
return RedirectToAction("Index");
}
else
{
return View();
}
Если я добавлю RequiredAttribute в поле описания, тогда моя модель будет считаться находящейся в недопустимом состоянии, а моя форма будет перезагружена, показывая сообщение об ошибке по умолчанию требуемого атрибута. Если я впоследствии отредактирую поле описания, тогда появится сообщение об ошибке проверки, которое я установил в атрибуте длины строки.
Это как должен вести себя атрибут? Это не проблема декорирования свойств с обязательным атрибутом, но кажется противоречащим, поскольку поле не требуется. Я просто хочу убедиться, что если пользователь что-то вводит, он попадает в диапазон атрибута длины строки.