2012-01-17 40 views
5

Tôi đang cố gắng thiết lập mô hình chế độ xem của mình cho một biểu mẫu sẽ thu thập thông tin về những người tham gia một nhóm. Biểu mẫu phải chứa một số thông tin dẫn đầu, sau đó là danh sách 5 "Thành viên nhóm" (mỗi tên có chứa một tên, email và điện thoại), hai yêu cầu đầu tiên sẽ được yêu cầu. Đối với xác nhận của tôi, tôi muốn nó phải được trên các lĩnh vực cá nhân, như thế này:Tùy chọn [Bắt buộc] trên các loại phức tạp

Person 1: 
Name: (validation messaage) 
Email: (validation message) 
Phone: (validation message) 

Person 2: 
Name: (validation messaage) 
Email: (validation message) 
Phone: (validation message) 

Person 3: 
Name: 
Email: 
Phone: 

Person 4: 
Name: 
Email: 
Phone: 

Person 5: 
Name: 
Email: 
Phone: 

Phần liên quan của viewmodel của tôi hiện nay là:

[Required] 
public TeamMember TeamMember1 { get; set; } 

[Required] 
public TeamMember TeamMember2 { get; set; } 

public TeamMember TeamMember3 { get; set; } 

public TeamMember TeamMember4 { get; set; } 

public TeamMember TeamMember5 { get; set; } 

như vậy trong quan điểm của tôi, tôi chỉ cần viết:

@Html.EditorFor(model=>model.TeamMember1) 

@Html.EditorFor(model=>model.TeamMember2) 

@Html.EditorFor(model=>model.TeamMember3) 

@Html.EditorFor(model=>model.TeamMember4) 

@Html.EditorFor(model=>model.TeamMember5) 

mẫu biên tập viên trông như thế này:

@model MyProject.Models.TeamMember 

<div class="editor-label"> 
    @Html.LabelFor(model => model.Name) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Name) 
    @Html.ValidationMessageFor(model => model.Name) 
</div> 

<div class="editor-label"> 
    @Html.LabelFor(model => model.Email) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Email) 
    @Html.ValidationMessageFor(model => model.Email) 
</div> 

<div class="editor-label"> 
    @Html.LabelFor(model => model.Phone) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Phone) 
    @Html.ValidationMessageFor(model => model.Phone) 
</div> 

Xin lỗi vì đã ném quá nhiều vào một chuỗi, nhưng có ai có đề xuất về cách tốt nhất để thiết lập điều này không? Tôi đã nghĩ về kế thừa từ RequiredAttribute và thay thế [Bắt buộc] trên các thuộc tính TeamMember, nhưng tôi không chắc chắn làm thế nào để thiết lập các thông báo xác nhận trên các trường con. Ngay bây giờ, ngay cả khi nó rỗng nó vượt qua kiểm tra yêu cầu, tôi giả định vì các đối tượng bị ràng buộc (và vì vậy không null) mặc dù tất cả các thuộc tính đều trống.

Mọi phản hồi đều được đánh giá cao.

Trả lời

1

Bạn có thể viết trình xác thực tùy chỉnh. Dưới đây là ví dụ về cách bạn có thể truy cập các giá trị của các thuộc tính khác. Sau đó, bạn có thể trang trí TeamMember hoặc thuộc tính với thuộc tính xác thực tuỳ chỉnh này tùy thuộc vào logic xác thực. Tôi muốn giới thiệu nó ở cấp độ lớp học

protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
{ 
    //Retreive value of Name property 
    var nameProperty = validationContext.ObjectType.GetProperty("Name"); 
    var namePropertyValue = (string)nameProperty.GetValue(validationContext.ObjectInstance, null); 

    var propertyBeingValidatedValue = (string)value; 

    //Validation logic 
    if ((!string.IsNullOrEmpty(propertyBeingValidatedValue)) && (!string.IsNullOrEmpty(namePropertyValue))) 
    { 
     //returning null means everything is good. 
     return null; 
    } 
    //return a message in any other case. 
    return new ValidationResult("Validation Message"); 
} 
Các vấn đề liên quan