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

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

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;

}

}

希望这会有所帮助。

以上是 使用数据注释验证手动和对象图 的全部内容, 来源链接: utcz.com/qa/260453.html

回到顶部