c# – xVal,整个类的DataAnnotations
作者:互联网
我对一个项目进行了完整的验证,并试图找出处理它的最佳方法.
鉴于以下课程:
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类的实例,但它永远不会在我的验证运行器上调用?
有谁知道处理这个的方法?
谢谢,
哈尔
解决方法:
我不认为这与你有一个类级验证器的事实有关.要排除任何连接,请尝试将虚拟必需验证器应用于“ToName”,并查看是否已调用验证程序.
如果它被调用,那么让我知道,如果不是,那么你应该检查你是否已经使用Global.asax.cs文件中的DataAnnotationsModelBinder覆盖了标准模型绑定器:
ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder();
有关此工作和完整工作演示项目的更多详细信息,请阅读此blog article about client-side validation.
标签:c,asp-net-mvc,data-annotations,xval 来源: https://codeday.me/bug/20190701/1344417.html