Nói rằng tôi có một mô hình như thế nàyTuỳ chỉnh Html helper có thể duyệt DataAnnotations
public class User
{
[Required]
[StringLength(14, ErrorMessage = "Can only be 14 characters long")]
public string UserName;
}
Tôi muốn tạo ra một helper Html như thế này:
@Html.ValidatableEditorFor(m => m.UserName)
để nó spits ra một trường văn bản với định dạng đúng cho plugin jQuery Vaidation để có thể xác thực, như sau:
<input type="text" class="required" maxlength="14" />
Từ nghiên cứu của tôi, có vẻ như không có cách để lặp qua tất cả chú thích dữ liệu trong MetaDataModel để tôi có thể kiểm tra xem cái nào có thể áp dụng cho Xác thực jQuery.
Làm thế nào tôi hình dung nó làm việc trong mã giả:
var tag = new TagBuilder("input");
tag.mergeAttribute("type", "text");
foreach(var attribute in metadata.attributes)
{
CheckForValidatableAttribute(attribute, tag);
}
...
private void CheckForValidatableAttribute(DataAnnotation attribute, TagBuilder tag)
{
switch(attribute.type)
{
case Required:
tag.addClass("required");
break;
case StringLength
tag.mergeAttribute("maxlength", attribute.value)
break;
}
}
Làm thế nào tôi có thể đi về việc đạt được một helper như thế này? Tôi muốn nó hoạt động trên các chú thích dữ liệu để tôi không phải sao chép các chữ xác nhận.
Ví dụ: người trợ giúp Html hiện tại như TextEditorFor làm gắn các thuộc tính hợp lệ vào trường đầu ra của chúng. Làm thế nào để làm điều này, và làm thế nào tôi có thể thực hiện của riêng tôi?
Cheers
Nhưng không có bộ sưu tập MetaDataModel.Attributes. Làm cách nào để có danh sách tất cả các thuộc tính mà bất kỳ mô hình cụ thể nào có thể có? – Chris
Xem cập nhật của tôi .. – Aliostad
Tôi đã thay đổi mã ValidationEditorFor để nó lấy được thuộc tính ValidationAttribute từ thuộc tính. Vì nó đã được, nó đã được tìm kiếm các thuộc tính về Loại tài sản (chuỗi, int, bất cứ điều gì). Mã đang làm việc tuyệt vời ngay bây giờ nhờ! :) – Chris