gpt4 book ai didi

c# - xVal,整个类的DataAnnotations

转载 作者:行者123 更新时间:2023-11-30 12:18:51 26 4
gpt4 key购买 nike

我对一个对象进行了完整的验证,并试图找出处理它的最佳方法。

给定以下类:

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 覆盖了您的标准模型绑定(bind)器:

ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder();

有关此完整工作演示项目的更多详细信息,请阅读 blog article about client-side validation .

关于c# - xVal,整个类的DataAnnotations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1348218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com