• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

使用数据注释验证手动和对象图

validation 来源:Kerem ÖZMAN 4次浏览

让我们假设我有两个简单的类:使用数据注释验证手动和对象图

public class CustomerDetails 
{ 
    [Required] 
    public string Address 
    { 
    get; 
    set; 
    } 
} 

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

    [Required] 
    public string Name 
    { 
    get; 
    set; 
    } 
    public CustomerDetails Details 
    { 
    get; 
    private set; 
    } 
} 

当我尝试手动验证在这样一个控制台应用程序Customer类:

var customer = new Customer() { Name = "Conrad" }; 
var context = new ValidationContext(customer, null, null); 
var results = new List<ValidationResult>(); 
Validator.TryValidateObject(customer, context, true); 

然后 – 尽管我选择验证客户实例的所有属性 – Validator只是验证客户实例的Name属性,而不验证Details的Address属性。

这是设计还是我在这里错过了什么?此外,如果这是通过设计,那么是否有一种可靠的方法来手动验证用验证属性装饰的完整对象图,包括嵌套类型而不是手动使用整个对象图的验证器?

请注意,这是在控制台应用程序内而不是ASP.NET MVC应用程序中测试的。

亲切的问候。

===========解决方案如下:

我几乎有同样的问题,但与嵌套对象的集合。我能够通过在容器类上实现IValidatableObject来解决它。在你的情况下,它更容易。这样的事情:

public class Customer : IValidatableObject 
{ 
    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; 
    } 
} 

希望这会有所帮助。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)