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)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           7430 次  |  
        
|   最近记录:  |