1

我在使用 [ObjectValidator] 时遇到问题。所以我有:

public class UserBO
{
    public int ID
    {
        get;
        set;
    }

    [NotNullValidator(MessageTemplate = "Can't be null!")]
    [RegexValidator(@"[a-z]|[A-Z]|[0-9]*", MessageTemplate = "Must be valid!", Ruleset = "validate_username")]
    [StringLengthValidator(5, RangeBoundaryType.Inclusive, 25, RangeBoundaryType.Inclusive,  Ruleset = "validate_username")]
    public string username
    {
        get;
        set;
    }

和另一个类:

public class PersonBO
{
    public int ID
    {
        get;
        set;
    }

    [NotNullValidator(MessageTemplate="Can't be null!")]
    [ObjectValidator(MessageTemplate = "Must be valid!", Ruleset="validate_obj_user")]
    public UserBO User
    {
        get;
        set;
    }
...

现在你能告诉我为什么下面的测试通过了吗?

[TestMethod()]
public void PersonBOConstructorTest()
    {
        PersonBO target = new PersonBO()
            {
                User = new UserBO
                {
                    ID = 4,
                    username = "asd"
                }
            };
        ValidationResults vr = Validation.Validate<PersonBO>(target, "validate_obj_user");
        Assert.IsTrue(vr.IsValid);
    }

这应该是无效的,因为:用户属性(UserBO 类型)包含用户名“asd”(3 个字符),我为它定义了一个 StringLengthValidator(5 到 25 个字符之间).. 那么为什么测试通过了?该对象无效,我无法理解。

谢谢。

4

1 回答 1

1

如果您希望应用默认集以外的规则集,则必须在 ObjectValidator 中指定规则集。

[ObjectValidator("validate_username", MessageTemplate = "Must be valid!", Ruleset = "validate_obj_user")]

以上应该适用于这种特定情况。或者,您可以从字符串长度验证器中删除规则集参数,以将其保留在默认集中。

于 2010-02-16T23:50:04.373 回答