我已经对一个对象进行了完整的验证,并且正在尝试找出处理它的最好方法。
给定以下类:
public class LetterResponse {
public Guid Id {get;set;}
public bool SendBlankCart {get;set;}
public string ToName {get;set;}
public string ToAddress {get;set;}
}我希望在持久化类之前使用dataannotation和xval来验证它,但是我有一个复杂的验证,它需要多个属性。
伪:
if SendBlankCart {
- no validation on ToName, ToAddress
} else {
ToName - required.
ToAddress - required.
}我想这样注释:
[LetterResponseValidator]
public class LetterResponse {
public Guid Id {get;set;}
public bool SendBlankCart {get;set;}
public string ToName {get;set;}
public string ToAddress {get;set;}
}并有一个如下的验证规则:
public class LetterResponseValidator : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value.GetType() == typeof(LetterResponse))
{
var letterResponse = (letterResponse) value;
if (letterResponse.SendBlankCard)
{
return true;
} else
{
if (string.IsNullOrEmpty(letterResponse.FromDisplayName) || string.IsNullOrEmpty(letterResponse.ToAddress1))
{
return false;
}
return true;
}
}
return false;
}
}我希望这个参数是我的LetterResponse类的实例,但它从来没有在我的验证运行器上被调用。
有谁知道解决这个问题的方法吗?
谢谢,
硬件
发布于 2009-08-28 16:56:48
我不认为这与你有一个类级验证器的事实有关。要排除任何连接,请尝试将所需的虚拟验证器应用于"ToName“,并查看是否调用了该验证器。
如果它正在被调用,那么让我知道,如果它没有被调用,那么你应该检查你是否已经用Global.asax.cs文件中的DataAnnotationsModelBinder覆盖了你的标准模型绑定器:
ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder();有关这个完整的演示项目的更多详细信息,请阅读此blog article about client-side validation。
https://stackoverflow.com/questions/1348218
复制相似问题