У чому різниця у поведінці [MaxLength]
та [StringLength]
ознаках?
Наскільки я можу сказати (за винятком того, що [MaxLength]
може підтвердити максимальну довжину масиву), вони однакові і дещо зайві?
У чому різниця у поведінці [MaxLength]
та [StringLength]
ознаках?
Наскільки я можу сказати (за винятком того, що [MaxLength]
може підтвердити максимальну довжину масиву), вони однакові і дещо зайві?
Відповіді:
MaxLength використовується для Entity Framework, щоб визначити, наскільки великим буде поле для значення рядка під час створення бази даних.
Від MSDN:
Вказує максимальну довжину даних масиву або рядків, дозволених у властивості.
StringLength - це анотація даних, яка буде використана для перевірки введення користувача.
Від MSDN:
Вказує мінімальну та максимальну довжину символів, дозволених у полі даних.
MaxLengthAttribute
, тоді як EF розпізнаєStringLengthAttribute
[MaxLength]
тоді з'являється ErrorMessage?
Деякі швидкі, але надзвичайно корисні додаткові відомості, про які я щойно дізнався з іншої публікації, але не можу знайти документацію (якщо хтось може поділитися посиланням на неї в MSDN, що було б дивним):
Повідомлення перевірки, пов'язані з цими атрибутами, фактично замінять заповнювачі, пов’язані з атрибутами. Наприклад:
[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }
Виводиться наступне, якщо воно перевищує обмеження символів: "Адреса може містити максимум 100 символів"
Мені відомі заповнювачі місць:
Нижче наводяться результати, коли ми використовуємо [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 атрибута може забезпечити тільки Макс необхідний діапазон не в хв потрібно діапазон. Перебуваючи в StringLength, ви можете забезпечити і те, і інше .
Я вирішив це, додавши нижній рядок у свій контекст:
modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);
Якось, [MaxLength]
у мене не вийшло.
Використовуючи атрибут для обмеження максимальної довжини введення тексту з форми на веб-сторінці, StringLength, здається, генерує атрибут maxle length html (принаймні, в моєму тесті з MVC 5). Вибраний потім описує, як ви хочете попередити користувача, що це максимальна довжина тексту. За допомогою атрибута stringlength користувач просто не зможе набрати більше допустимої довжини. Атрибут maxlength не додає цей атрибут html, натомість він генерує атрибути перевірки даних, що означає, що користувач може вводити більше вказаної довжини, а те, що запобігання більш тривалому вводу залежить від перевірки в JavaScript, коли він перейде до наступного поля або натисне подання (або якщо JavaScript відключений, перевірка на стороні сервера). У цьому випадку користувач може бути повідомлений про обмеження за допомогою повідомлення про помилку.