2013-03-19 22 views
11
在目的

我已經實現IValidatableObject幾次,從來沒有發現什麼解析ValidationContext的驗證方法的目的是 - 我的典型IValidatableObject實施看起來是這樣的:什麼是ValidationContext的實施IValidatableObject

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

有什麼我錯過了,我可以使用validationContext

編輯:我正在使用ASP.NET MVC,這是在類中實現 - 不在控制器中。

回答

6

ValidationContext包含IServiceProvider財產。將DI容器傳遞給您的驗證屬性和驗證方法是擴展點。 作爲示例,您可以使用它來針對數據庫進行驗證,而無需在模型中設置對dbcontext的依賴關係。

+6

它有助於舉例說明如何在這種特殊情況下通過DI容器。 – Stack0verflow 2014-05-14 12:36:38

+0

在asp.net mvc中可以通過創建自己的驗證提供程序來完成。 – 2014-05-15 06:05:00

+3

你能舉個例子嗎?我真的被卡住,試圖正確地進行驗證,並看到沒有代碼的潛在答案真的很傷心:( – 2015-08-21 21:43:07

6

您應該從validationContext中檢索Prop1Prop2。從你的問題很難說你是否使用WebForms(所以你有屬性的代碼綁定)或MVC(如果你正在控制器中實現這一點)。

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