Sự khác biệt trong hành vi [MaxLength]
và [StringLength]
thuộc tính là gì?
Theo như tôi có thể nói (với ngoại lệ [MaxLength]
có thể xác nhận độ dài tối đa của một mảng) thì chúng có giống nhau và hơi dư thừa không?
Sự khác biệt trong hành vi [MaxLength]
và [StringLength]
thuộc tính là gì?
Theo như tôi có thể nói (với ngoại lệ [MaxLength]
có thể xác nhận độ dài tối đa của một mảng) thì chúng có giống nhau và hơi dư thừa không?
Câu trả lời:
MaxLpm được sử dụng cho Entity Framework để quyết định mức độ lớn để tạo trường giá trị chuỗi khi nó tạo cơ sở dữ liệu.
Từ MSDN:
Chỉ định độ dài tối đa của dữ liệu mảng hoặc chuỗi được phép trong một thuộc tính.
StringLpm là một chú thích dữ liệu sẽ được sử dụng để xác nhận đầu vào của người dùng.
Từ MSDN:
Chỉ định độ dài tối thiểu và tối đa của các ký tự được phép trong trường dữ liệu.
MaxLengthAttribute
, trong khi EF nhận raStringLengthAttribute
[MaxLength]
có ErrorMessage?
Một số thông tin bổ sung nhanh chóng nhưng cực kỳ hữu ích mà tôi vừa học được từ một bài đăng khác, nhưng dường như không thể tìm thấy tài liệu cho (nếu ai đó có thể chia sẻ liên kết đến nó trên MSDN sẽ rất tuyệt vời):
Các thông báo xác thực được liên kết với các thuộc tính này sẽ thực sự thay thế các trình giữ chỗ được liên kết với các thuộc tính. Ví dụ:
[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }
Sẽ xuất ra các mục sau nếu vượt quá giới hạn ký tự: "Địa chỉ có thể có tối đa 100 ký tự"
Các trình giữ chỗ tôi biết là:
Rất cám ơn bloudraak vì đã chỉ ra điều này.
Sau đây là kết quả khi chúng tôi sử dụng cả hai [MaxLength]
và [StringLength]
thuộc tính, trong EF code first
. Nếu cả hai được sử dụng, [MaxLength]
chiến thắng cuộc đua. Xem kết quả kiểm tra trong studentname
cột ở bên dưới lớp
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; }
}
Tất cả các câu trả lời tốt ... Từ góc độ xác thực, tôi cũng nhận thấy rằng MaxLạng chỉ được xác thực ở phía máy chủ, trong khi StringLạng cũng được xác thực ở phía máy khách.
MaxLạngAttribution có nghĩa là Max. độ dài của dữ liệu mảng hoặc chuỗi được phép
StringLạngAttribution có nghĩa là Tối thiểu. và tối đa độ dài của các ký tự được phép trong trường dữ liệu
Truy cập http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-USE-data-annotations/
Một điểm khác cần lưu ý là trong thuộc tính MaxLạng, bạn chỉ có thể cung cấp phạm vi yêu cầu tối đa không phải là phạm vi yêu cầu tối thiểu . Trong khi ở StringLạng bạn có thể cung cấp cả hai .
Khi sử dụng thuộc tính để hạn chế độ dài đầu vào tối đa cho văn bản từ một biểu mẫu trên trang web, StringLạng dường như tạo ra thuộc tính html maxlength (ít nhất là trong thử nghiệm của tôi với MVC 5). Sau đó, một trong những lựa chọn sẽ phụ thuộc vào cách bạn muốn cảnh báo người dùng rằng đây là độ dài văn bản tối đa. Với thuộc tính stringlength, người dùng sẽ không thể gõ vượt quá độ dài cho phép. Thuộc tính maxlength không thêm thuộc tính html này, thay vào đó, nó tạo ra các thuộc tính xác thực dữ liệu, nghĩa là người dùng có thể nhập vượt quá độ dài được chỉ định và việc ngăn chặn đầu vào dài hơn phụ thuộc vào xác thực trong javascript khi anh ta chuyển sang trường tiếp theo hoặc nhấp vào gửi (hoặc nếu javascript bị vô hiệu hóa, xác thực phía máy chủ). Trong trường hợp này, người dùng có thể được thông báo về sự hạn chế bằng một thông báo lỗi.