Как работает StringLengthAttribute? - PullRequest
15 голосов
/ 19 октября 2011

У меня проблемы с использованием 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 в поле описания, моя модель классифицируется как недопустимая, и моя форма перезагружается, показывая сообщение об ошибке по умолчанию для обязательного атрибута. Если я впоследствии отредактирую поле описания, оно отобразит сообщение об ошибке проверки, которое я установил в атрибуте длины строки.

Так должен вести себя атрибут? Это не проблема, чтобы украсить свойства обязательным атрибутом, но кажется нелогичным, так как поле не является обязательным. Я просто хочу убедиться, что если пользователь что-то печатает, он попадает в диапазон атрибута длины строки.

Ответы [ 2 ]

21 голосов
/ 19 октября 2011

Да, это правильное поведение. StringLength проверяет, что строка имеет определенную длину, но не REQUIRE , чтобы строка была введена. Украсьте Description с помощью [Required], чтобы у вас было и требование к строке, и StringLength предоставит ограничения на длину строки.

1 голос
/ 22 декабря 2016

Ключевое слово следующим образом:

 class PartMetadata
 {
     // required keyword forces user to enter input
     [Required] 
     [DisplayName("Part number")]
     // or [Required(ErrorMessage="* Required")]

     // ErrorMessage in string only enforces when data is entered
     [StringLength(50, MinimumLength = 3, ErrorMessage = "* Part numbers must be between 3 and 50 character in length.")]
     public string Number { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...