.Net 3.5 MetadataType在使用验证程序时忽略

时间:2010-08-15 10:56:59

标签: c# enterprise-library

我已使用企业库验证机制阅读并搜索了此问题。这个非常简单的表单应用程序演示了该问验证程序将忽略Metadata类。我试图在具有实体框架的MVC应用程序中使用它。

这是在Linux SP3上使用VS 2008的.NEt 3.5。

namespace ValidationTest
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        string longname = "this is much too long to be a name";
        Customer2 cust = new Customer2(longname);

        ValidationResults r = Validation.Validate<Customer2>(cust);
        if (!r.IsValid)
        {
            throw new ArgumentException();
        }
    }
}


public partial class Customer2
{

    public string CustomerName;

    public Customer2(string name)
    {

        CustomerName = name;
    }

}

[MetadataType(typeof(CustMetadata))]
public partial class Customer2
{
}

public class CustMetadata
{
    [StringLengthValidator(0, 20)]
    public string CustomerName { get; set; }
}

}

它们都在同一个文件中用于演示目的。如果我将StringLengthAttribute移动到主类,它确实有效。

非常感谢任何见解。

由于

1 个答案:

答案 0 :(得分:1)

您看到的问题是,在Customer2类中,CustomerName是一个字段,但在CustMetadata类中,CustomerName是一个属性。

如果您将CustMetadata更改为:

public class CustMetadata
{
    [StringLengthValidator(0, 20)]
    public string CustomerName;
}

然后按预期工作。

验证应用程序块在匹配MetaData时使用MemberTypeName