如何使用MetaData类验证数据注释

时间:2010-01-22 04:38:15

标签: c# validation .net-4.0 data-annotations

我正在尝试使用Data Annotations但使用元数据类来验证类。

[MetadataType(typeof(TestMetaData))]
public class Test
{
    public string Prop { get; set; }

    internal class TestMetaData
    {
        [Required]
        public string Prop { get; set; }
    }
}

[Test]
[ExpectedException(typeof(ValidationException))]
public void TestIt()
{
    var invalidObject = new Test();
    var context = new ValidationContext(invalidObject, null, null);
    context.MemberName = "Prop";
    Validator.ValidateProperty(invalidObject.Prop, context);
}

测试失败。如果我抛弃了元数据类,只是在实际的类上装饰了它,它就可以了。我做错了吗?这让我处于疯狂的边缘。请帮忙。

2 个答案:

答案 0 :(得分:1)

Answer

以下是帮助我解决此问题的帖子的链接。显然你必须首先注册matadata类。

答案 1 :(得分:-1)

元数据类必须是公共的,才能使外部验证起作用。

[MetadataType(typeof(TestMetaData))] 
public class Test 
{ 
    public string Prop { get; set; } 

    public class TestMetaData 
    { 
        [Required] 
        public string Prop { get; set; } 
    } 
}

我认为在模型类中定义元数据类,就像在您的示例中一样,应该可以工作。没有测试过。