gpt4 book ai didi

c# - 使用注释和 IValidatableObject 进行递归验证

转载 作者:太空狗 更新时间:2023-10-29 17:55:26 28 4
gpt4 key购买 nike

我正在尝试使用注释和一些自定义代码来验证嵌套对象(不是 MVC 中的模型)。

我发现以下帖子很有用

Using Data Annotations Validation Manually and Object Graphs

正如答案中所建议的那样,我在容器类中创建了一个额外的例程来验证嵌套对象。这是我修改后的测试代码

public class Customer : IValidatableObject
{
public Customer()
{
Details = new CustomerDetails();
}

[Required]
[MaxLength(2)]
public string Name
{
get;
set;
}

public CustomerDetails Details
{
get;
private set;
}

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var context = new ValidationContext(this.Details, validationContext.ServiceContainer, validationContext.Items);
var results = new List<ValidationResult>();
Validator.TryValidateObject(this.Details, context, results);
return results;
}
}

但是,即使在将 validateAllProperties 设置为 true 的情况下调用 TryValidateObject 时,我也无法获取所有 验证错误。

        var context = new ValidationContext(cs, null, null);
var results = new List<ValidationResult>();
Validator.TryValidateObject(cs, context, results,true);

如果容器中有任何错误,只会显示这些错误。只有当容器对象中没有错误时,嵌套对象中的错误才会显示。我怀疑它与 Validate rouine 返回完整列表有关,并且无法从容器中添加到(现有)列表(?)

是否可以对例程进行任何修改以显示所有错误?

最佳答案

查看此答案:https://stackoverflow.com/a/3400627/724944

因此,您的类的属性中存在错误,因此不会调用 Validate 方法。我建议使用 CustomValidationAttribute像这样:

[CustomValidation(typeof(Customer), "ValidateRelatedObject")]
public CustomerDetails Details
{
get;
private set;
}

public static ValidationResult ValidateRelatedObject(object value, ValidationContext context)
{
var context = new ValidationContext(value, validationContext.ServiceContainer, validationContext.Items);
var results = new List<ValidationResult>();
Validator.TryValidateObject(value, context, results);

// TODO: Wrap or parse multiple ValidationResult's into one ValidationResult

return result;

}

关于c# - 使用注释和 IValidatableObject 进行递归验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8548482/

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