我知道这可能是不可能的,但我要说我有一个有两个属性的模型。
我为其中一个属性编写了ValidationAttribute。 VA可以查看其他财产并做出决定吗?
因此;
public class QuickQuote
{
public String state { get; set; }
[MyRequiredValidator(ErrorMessage = "Error msg")]
public String familyType { get; set; }
所以在上面的例子中,验证器可以测试看看“state”属性中的内容并在验证“familyType”时考虑到这一点吗?
我知道我可以将对象保存到会话中,但如果可能的话,我希望避免任何状态保存。
答案 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
}
}