Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 验证应用程序块对象验证程序不使用规则集_.net_Enterprise Library_Validation Application Bl - Fatal编程技术网

.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”)]
尝试了一下,但失败了。