0

我正在使用 Microsoft 企业验证。但在这种情况下,测试通过了,即使我为该属性分配了空值。为什么?

[NotNullValidator(MessageTemplate = "Cannot be null!", Ruleset="validate_x")]
[StringLengthValidator(10, RangeBoundaryType.Inclusive, 40, RangeBoundaryType.Inclusive, Ruleset="validate_x")]
[RegexValidator(@"^[A-Z][a-z]*\s[A-Z][a-z]*$", MessageTemplate = "Not valid!", Ruleset="validate_x")]
public string x
{
    get;
    set;
}

在测试类中:

[TestMethod()]
public void xTest()
{
    MyBO target = new MyBO() { x = null };
    ValidationResults vr = Validation.Validate<MyBO>(target, "validate_x");
    Assert.IsTrue(vr.IsValid);
}

所以我知道这是有效的,但它不应该是。(x 为空!)有什么想法吗?

谢谢

4

1 回答 1

1

将您提供的代码复制到一个简单的控制台应用程序时,我看到对象的IsValid属性ValidationResults变为False. 我认为您在某处做错了什么,但这是不可能的,因此只需查看您的代码即可看到这一点。这是我使用的代码:

public class MyBO
{
    [NotNullValidator(MessageTemplate = "Cannot be null!",
        Ruleset = "validate_x")]
    [StringLengthValidator(10, RangeBoundaryType.Inclusive, 40, 
        RangeBoundaryType.Inclusive, Ruleset = "validate_x")]
    [RegexValidator(@"^[A-Z][a-z]*\s[A-Z][a-z]*$",
        MessageTemplate = "Not valid!", Ruleset = "validate_x")]
    public string x { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        MyBO target = new MyBO() { x = null };
        ValidationResults vr = Validation.Validate<MyBO>(target, "validate_x");
        Console.WriteLine(vr.IsValid);
    }
}
于 2010-02-15T13:00:33.507 回答