Kể từ bây giờ tôi đã sử dụng thư viện FluentValidation tuyệt vời để xác thực các lớp mô hình của tôi. Trong các ứng dụng web tôi sử dụng nó kết hợp với các plugin jquery.validate để thực hiện xác nhận phía khách hàng là tốt. Một hạn chế là nhiều logic xác thực được lặp lại ở phía máy khách và không còn tập trung tại một nơi duy nhất nữa.Xác nhận mô hình tùy chỉnh các thuộc tính phụ thuộc bằng cách sử dụng Chú thích dữ liệu
Vì lý do này, tôi đang tìm kiếm giải pháp thay thế. Có many ví dụ ra there cho biết cách sử dụng chú thích dữ liệu để thực hiện xác thực mô hình. Nó trông rất hứa hẹn. Một điều tôi không thể tìm ra là làm cách nào để xác thực một thuộc tính phụ thuộc vào giá trị thuộc tính khác.
Hãy lấy ví dụ như mô hình sau:
public class Event
{
[Required]
public DateTime? StartDate { get; set; }
[Required]
public DateTime? EndDate { get; set; }
}
tôi muốn đảm bảo rằng EndDate
lớn hơn StartDate
. Tôi có thể viết thuộc tính xác thực tùy chỉnh mở rộng ValidationAttribute để thực hiện logic xác thực tùy chỉnh. Đáng tiếc là tôi không thể tìm thấy một cách để có được những ví dụ mô hình:
public class CustomValidationAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
// value represents the property value on which this attribute is applied
// but how to obtain the object instance to which this property belongs?
return true;
}
}
tôi thấy rằng các CustomValidationAttribute dường như để làm công việc bởi vì nó có thuộc tính này ValidationContext
có chứa các trường hợp đối tượng được xác nhận. Thật không may thuộc tính này đã được thêm vào chỉ trong .NET 4.0. Vì vậy, câu hỏi của tôi là: tôi có thể đạt được chức năng tương tự trong .NET 3.5 SP1 không?
UPDATE:
Dường như FluentValidation already supports xác nhận clientside và siêu dữ liệu trong ASP.NET MVC 2.
Tuy nhiên nó sẽ là tốt để biết tuy nhiên nếu các chú thích dữ liệu có thể được sử dụng để xác nhận tính chất phụ thuộc .
có bạn hoặc có ai tìm ra cách để thu thập dữ liệu và FluentValidation hoạt động (để xác thực) cùng nhau trên cùng một lớp/mô hình không? nếu như vậy sẽ là tuyệt vời, tôi có một thread về cuộc thảo luận này với FV tác giả Jeremy, bạn có thể xem ở đây: http://fluentvalidation.codeplex.com/Thread/View.aspx?ThreadId=212371 –