0

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

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

所以;

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

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

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

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

4

3 回答 3

3

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

于 2010-04-16T09:01:42.580 回答
1

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

这个页面有一些关于实现 IDataErrorInfo 接口的信息,在标题“实现 IDataErrorInfo 接口”下大约 2/3

于 2010-04-15T23:09:47.403 回答
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
        }      
    }
于 2013-11-10T17:48:28.900 回答