.net 验证应用程序块对象验证程序不使用规则集
我一直在努力解决这个问题,我最初认为可能是多态性/继承影响了我的验证,但我把它缩小到了这个范围 这是班级结构.net 验证应用程序块对象验证程序不使用规则集,.net,enterprise-library,validation-application-bl,.net,Enterprise Library,Validation Application Bl,我一直在努力解决这个问题,我最初认为可能是多态性/继承影响了我的验证,但我把它缩小到了这个范围 这是班级结构 public class Employee { [ObjectValidator(Ruleset = "A")] public EmployeeName Name { get; set; } public Employee() { Name = new EmployeeName(); } } public class Empl
public class Employee {
[ObjectValidator(Ruleset = "A")]
public EmployeeName Name { get; set; }
public Employee()
{
Name = new EmployeeName();
}
}
public class EmployeeName
{
[StringLengthValidator(1,20,Ruleset = "A")]
public string First { get; set; }
public string Last { get; set; }
public EmployeeName()
{
First = string.Empty;
Last = string.Empty;
}
}
测试:
[TestFixture]
public class ObjectValidationWithRulesets
{
[Test]
public void wont_validate_with_a_ruleset()
{
var person = new Employee()
{
Name = new EmployeeName()
{
First = string.Empty,
Last = string.Empty
}
};
var ruleSetValidator =
ValidationFactory.CreateValidator<Employee>("A");
var validationResults = ruleSetValidator.Validate(person);
Assert.That(!validationResults.IsValid,
"Validation with rulsets failed");
}
}
[TestFixture]
公共类ObjectValidationWithRuleSet
{
[测试]
public void不会使用规则集()验证
{
var person=新员工()
{
Name=新员工姓名()
{
First=string.Empty,
Last=string.Empty
}
};
var规则集验证器=
CreateValidator(“A”);
var validationResults=ruleSetValidator.Validate(个人);
Assert.That(!validationResults.IsValid,
“rulsets验证失败”);
}
}
如果我删除了规则集内容,这个测试就通过了。但一旦应用了规则集,我就无法正确验证对象
有人能解释一下吗
干杯,我也有这个问题,但我没有在配置文件中定义targetRuleSet。我纠正了声明ObjectValidator属性的方式,解决了这个问题。对我有效的正确语法如下
// Correct
[ObjectValidator("RuleSetA", Ruleset = "RuleSetA")]
在我的代码中,我错误地声明如下
// Wrong syntax
[ObjectValidator(Ruleset = "RuleSetA")]
好啊因此,我一直在玩web.config文件中的验证配置,结果证明,要让ObjectValidator使用规则集,它需要定义其targetRuleSet属性。有趣的是,这个字段并没有在ObjectValidator属性中公开。这是故意的吗?Pradeeptp是对的。出于某种奇怪的原因,
ObjectValidator属性
在其DoCreateValidator
方法中没有使用Ruleset
属性,而只使用通过targetRuleset
构造函数参数设置的值。Steven,请确认您编辑的内容是否正确?。我可以看到您在我的原始示例中添加了“或//正确…”部分。@pradeeptp,实际上我认为这不正确。我只是用规则集[ObjectValidator(“RuleSetA”)]
尝试了一下,但失败了。