针对整个模型的Custom ValidationAttribute测试

时间:2010-04-15 23:05:10

标签: asp.net-mvc data-annotations validationattribute

我知道这可能是不可能的,但我要说我有一个有两个属性的模型。

我为其中一个属性编写了ValidationAttribute。 VA可以查看其他财产并做出决定吗?

因此;

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

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

所以在上面的例子中,验证器可以测试看看“state”属性中的内容并在验证“familyType”时考虑到这一点吗?

我知道我可以将对象保存到会话中,但如果可能的话,我希望避免任何状态保存。

3 个答案:

答案 0 :(得分:2)

您的自定义验证可以直接应用于该类,请查看默认情况下作为VS2008中MVC项目模板的一部分创建的AccountModels类中的PropertiesMustMatch属性。

答案 1 :(得分:1)

实现此类验证的另一种方法是让您的模型实现IDataErrorInfo。这样你就可以进行整个视图模型验证。

This page提供了一些关于补充IDataErrorInfo接口的信息,大约在“实现IDataErrorInfo接口”标题下的2/3处

答案 2 :(得分: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
        }      
    }