goo*_*orj 9 c# validation asp.net-mvc
我试图使用注释和一些自定义代码验证嵌套对象(不是MVC senss中的模型).
我发现以下帖子很有用
正如在答案中所建议的,我在容器类中创建了一个额外的例程来验证嵌套对象.这是我修改过的测试代码
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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,即使在将validateAllProperties设置为true的情况下调用TryValidateObject时,我也无法获得所有验证错误.
var context = new ValidationContext(cs, null, null);
var results = new List<ValidationResult>();
Validator.TryValidateObject(cs, context, results,true);
Run Code Online (Sandbox Code Playgroud)
如果容器中有任何错误,则只显示这些错误.仅当容器对象中没有错误时,才会显示嵌套对象中的错误.我怀疑它与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;
}
Run Code Online (Sandbox Code Playgroud)