StringLength vs maxlength атрибуты ASP.NET MVC с Entity Framework EF Code First



В чем разница в поведении [MaxLength] и [StringLength] атрибуты?

насколько я могу судить (за исключением того, что [MaxLength] можно проверить максимальную длину массива) они идентичны и несколько избыточны?

225   7  

7 ответов:

MaxLength используется в Entity Framework для определения размера строкового поля значения при создании базы данных.

от MSDN:

задает максимальную длину массива или строковые данные, разрешенные в свойстве.

StringLength - это аннотация данных, которая будет использоваться для проверки пользовательского ввода.

от MSDN:

задает минимум и максимум длина символов, которые могут в поле данных.

некоторая быстрая, но чрезвычайно полезная дополнительная информация, которую я только что узнал из другого сообщения, но не могу найти документацию (если кто-то может поделиться ссылкой на нее на MSDN, это было бы удивительно):

сообщения проверки, связанные с этими атрибутами, фактически заменят заполнители, связанные с атрибутами. Например:

[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }

выведет следующее, если оно превышает лимит символов: " - адрес может иметь максимум 100 персонажи"

заполнители, о которых я знаю:

  • {0} = Имя Свойства
  • {1} = Максимальная Длина
  • {2} = Min Длина

спасибо bloudraak для первоначального указания на это.

Ниже приведены результаты, когда мы используем оба [MaxLength] и [StringLength] атрибуты, в EF code first. Если используются оба, [MaxLength] выигрывает гонку. Смотрите результат теста в studentname столбец ниже класса

 public class Student
 {
    public Student () {}

    [Key]
    [Column(Order=1)]
    public int StudentKey { get; set; }

    //[MaxLength(50),StringLength(60)]    //studentname column will be nvarchar(50)
    //[StringLength(60)]    //studentname column will be nvarchar(60)
    [MaxLength(50)] //studentname column will be nvarchar(50)
    public string StudentName { get; set; }

    [Timestamp]
    public byte[] RowVersion { get; set; }
 }

все хорошие ответы...С точки зрения проверки я также заметил, что MaxLength проверяется только на стороне сервера, в то время как StringLength проверяется также на стороне клиента.

MaxLengthAttribute означает Макс. длина массива или строки данных допускается

StringLengthAttribute означает Min. и Макс. длина символов, разрешенных в поле данных

посещение http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/

один другой пункт, чтобы отметить вниз находится в MaxLength вы можете предоставить только max требуемый диапазон не a мин требуемый диапазон. В то время как в StringLength вы можете предоставить и.

при использовании атрибута для ограничения максимальной длины ввода текста из формы на веб-странице StringLength, похоже, генерирует атрибут maxlength html (по крайней мере, в моем тесте с MVC 5). Выбор тогда depnds о том, как вы хотите, чтобы предупредить пользователя о том, что это максимальная длина текста. С атрибутом stringlength пользователь просто не сможет ввести больше разрешенной длины. Атрибут maxlength не добавляет этот атрибут html, вместо этого он генерирует данные атрибуты проверки, означающие, что пользователь может ввести больше указанной длины и что предотвращение более длинного ввода зависит от проверки в javascript, когда он переходит к следующему полю или нажимает кнопку отправить (или если javascript отключен, проверка на стороне сервера). В этом случае пользователь может быть уведомлен об ограничении сообщением об ошибке.

    Ничего не найдено.

Добавить ответ:
Отменить.