2010-04-15 67 views
0

我知道這可能是不可能的,但讓我們說我有一個具有兩個屬性的模型。自定義驗證對整個模型的屬性測試

我爲其中一個屬性編寫ValidationAttribute。那個VA可以看看其他財產並做出決定嗎?

所以;

public class QuickQuote 
{ 
    public String state { get; set; } 

    [MyRequiredValidator(ErrorMessage = "Error msg")] 
    public String familyType { get; set; } 

所以在上面的例子中,可以驗證測試,看看有什麼在「狀態」屬性,並考慮到這一點驗證了「familyType」的時候?

我知道我可以將對象保存到會話中,但如果可能的話,希望避免任何狀態的保存。

回答

1

實現這種驗證的另一種方法是讓您的模型實現IDataErrorInfo。這樣你可以做整個viewmodel驗證。

This page有大約iplementing的IDataErrorInfo的接口,關於標題下一路下跌2/3的一些信息「mplementing的IDataErrorInfo的接口」

+0

+1,這可能就是我要找的。現在讀它,謝謝。 – griegs 2010-04-15 23:12:52

2

你自定義的驗證可以直接應用於類,看看在默認情況下創建的AccountModels類中的PropertiesMustMatch屬性作爲VS2008中MVC項目模板的一部分。

0

使用ValidationContext讓你的模型:

public class MyRequiredValidator: RequiredAttribute 
    { 
     public override bool RequiresValidationContext 
     { 
      get {return true;} //it needs another propertie in model    
     } 

     protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
     { 
      QuickQuote model = (QuickQuote)validationContext.ObjectInstance; 

      if (model.state == "single") 
       return null; 
      else 
       return base.IsValid(value, validationContext);//familyType is require for married 
     }  
    }