2010-04-15 68 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 
     }  
    }