2013-03-19 20 views
11
là gì

tôi đã thực hiện IValidatableObject nhiều lần và chưa bao giờ phát hiện ra những gì mục đích của phân tích ValidationContext với phương pháp Validate là - điển hình IValidatableObject thực hiện của tôi trông giống như sau:mục đích ValidationContext khi thực hiện IValidatableObject

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 
    if (Prop1 == Prop2) 
    { 
     yield return new ValidationResult(
       "Prop1 and Prop2 must be different.", 
       new[] {"Prop1", "Prop2"}); 
    } 
} 

Có điều gì mà tôi đã bỏ lỡ mà tôi có thể đã sử dụng validationContext cho?

EDIT: Tôi đang sử dụng ASP.NET MVC và điều này được thực hiện trong lớp - không phải trong bộ điều khiển.

Trả lời

6

ValidationContext chứa IServiceProvider tài sản. Đó là điểm mở rộng để chuyển DI container đến các thuộc tính xác thực của bạn và các phương thức Validate. Bạn có thể sử dụng nó, ví dụ, để xác nhận hợp lệ đối với cơ sở dữ liệu mà không đặt sự phụ thuộc vào dbcontext trong mô hình của bạn.

+6

Nó giúp đưa ra một ví dụ về cách vượt qua một container DI trong tình huống cụ thể này. – Stack0verflow

+0

trong asp.net mvc này có thể được thực hiện với việc tạo ra nhà cung cấp xác nhận của riêng bạn. –

+3

Bạn có thể cho ví dụ về điều này không? Tôi thực sự bị mắc kẹt cố gắng để làm cho xác nhận đúng và để xem một câu trả lời potencial mà không có mã thực sự là buồn: ( –

6

Bạn nên truy xuất Prop1Prop2 từ validationContext. Từ câu hỏi của bạn rất khó để nói liệu bạn đang sử dụng WebForms (vì vậy bạn có mã ràng buộc với các thuộc tính) hoặc MVC (và nếu bạn đang thực hiện điều này trong bộ điều khiển).

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 
    if (validationContext["Prop1"] == validationContext["Prop2"]) 
    { 
     yield return new ValidationResult(
       "Prop1 and Prop2 must be different.", 
       new[] {"Prop1", "Prop2"}); 
    } 
} 
Các vấn đề liên quan