【发布时间】:2012-01-22 19:47:46
【问题描述】:
我正在尝试使用注释和一些自定义代码来验证嵌套对象(不是 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 返回完整列表有关,并且无法从容器中添加到(现有)列表中(?)
我可以对例程进行任何修改以显示所有错误吗?
【问题讨论】:
标签: c# asp.net-mvc validation