【发布时间】:2012-10-09 11:09:41
【问题描述】:
当我为父子类有 2 个不同的规则集时,对子类属性的验证不起作用。
这是类代码:Mytype 是父类,Person 是子类
[HasSelfValidation]
public class MyType
{
[SelfValidation(Ruleset = "RulesetA")]
[SelfValidation(Ruleset = "RulesetB")]
public void DoValidate(ValidationResults results)
{
}
[NotNullValidator(Ruleset = "RulesetA")]
[ObjectValidator("RulesetA", Ruleset = "RulesetA")]
public Person Person { get; set; }
}
public class Person
{
[NotNullValidator(Ruleset = "RulesetB")]
public string GivenName { get; set; }
}
这是针对所有规则集验证 MyType 类的自定义验证器类:
public interface IValidator<T>
{
ValidationResults Validate(T target);
}
public class MyValidator : IValidator<MyType>
{
public ValidationResults Validate(MyType target)
{
return Validation.Validate(target, new string[] {"RulesetA", "RulesetB"});
}
}
这是失败的测试:(IsValid 应该设置为 False,但它是 True)
[TestMethod]
public void Should_return_false_when_validating_MyType_without_PersonApplying_GivenName()
{
//arrange
var myType = new MyType()
{
Person= new Person()
};
myType.Person.GivenName = null;
//act
MyValidator _validator = new MyValidator();
var resultList = _validator.Validate(myType);
//assert
Assert.IsFalse(resultList.IsValid);
}
你能帮忙吗?
【问题讨论】:
-
我认为您应该从
[ObjectValidator]中删除Ruleset = "RulesetA"。只需使用:[ObjectValidator]来装饰该属性。这可确保Person始终得到验证。 -
不,它仍然失败:(
-
当您将
[ObjectValidator("RulesetB", Ruleset = "RulesetB")](和RulesetA)添加到Person属性时? -
它有效,但我的问题是为什么它在我的情况下不起作用,即使我正在验证所有规则集:Validation.Validate(target, new string[] {"RulesetA", "RulesetB"} );
标签: c# .net validation enterprise-library validation-application-bl