2011-11-10 48 views
38

Những gì tôi cần là một cách để có điều kiện xác nhận lĩnh vực tùy thuộc vào nếu các lĩnh vực khác được điền vào.Conditional Validation sử dụng thạo Validation

Ex. Tôi có một danh sách thả xuống và một trường ngày có liên quan. Nếu không có trường nào được đặt thì biểu mẫu phải vượt qua xác thực. Tuy nhiên, nếu một trong hai trường được đặt nhưng trường còn lại không phải là quá trình xác thực sẽ kích hoạt, yêu cầu phải đặt trường khác.

Tôi đã viết các lớp xác nhận tùy chỉnh nhưng có vẻ như nó được xác nhận trên các trường đơn lẻ. Có cách nào để thiết lập xác nhận mà tôi cần bằng cách sử dụng trình xác thực được tích hợp không? Nếu không, có cách nào tốt để kết nối hai trường bằng cách sử dụng trình xác thực tùy chỉnh không?

Trả lời

61

xác nhận thạo hỗ trợ xác nhận có điều kiện, chỉ cần sử dụng Khi khoản để kiểm tra giá trị của trường thứ cấp:

http://fluentvalidation.codeplex.com/wikipage?title=Customising&referringTitle=Documentation&ANCHOR#WhenUnless

Xác định một điều kiện với Khi/Trừ Các Khi nào và Trừ khi các phương pháp có thể được sử dụng để xác định các điều kiện kiểm soát khi quy tắc nên thực thi. Ví dụ, quy tắc này trên các tài sản CustomerDiscount sẽ chỉ thực hiện khi IsPreferredCustomer là đúng:

RuleFor (khách hàng => customer.CustomerDiscount) .GreaterThan (0) .Khi (khách hàng => customer.IsPreferredCustomer); `

Phương thức Trừ khi đơn giản là ngược lại với Thời điểm.

Bạn cũng có thể sử dụng thao tác .SetValidator để xác định trình xác thực tùy chỉnh hoạt động trên điều kiện NotEmpty.

RuleFor (khách hàng => customer.CustomerDiscount) .GreaterThan (0) .SetValidator (New MyCustomerDiscountValidator)

+1

Cảm ơn bạn đã cho thấy tôi "Khi" điều kiện. – Seva