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")]

上記は、この特定のケースで機能するはずです。または、文字列長バリデーターから ruleset パラメーターを削除して、デフォルトのセットのままにすることもできます。

于 2010-02-16T23:50:04.373 に答える