.Net 3.5 MetadataType Игнорируется при использовании валидатора - PullRequest
0 голосов
/ 15 августа 2010

Я прочитал и искал эту проблему с помощью механизма проверки библиотеки предприятия. Это очень простое приложение формы демонстрирует проблему. Класс метаданных игнорируется валидатором. Я пытаюсь использовать его в приложении MVC с Entity Framework.

Это в .NEt 3.5 с использованием VS 2008 на XP SP3.

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 Ответ

1 голос
/ 17 августа 2010

Проблема, с которой вы столкнулись, заключается в том, что в Customer2 классе CustomerName - это поле, а в CustMetadata классе CustomerName - это свойство.

Если вы измените CustMetadata на:

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

, затем он работает, как и ожидалось.

Блок приложения проверки использует как MemberType , так и Имя при сопоставлении метаданных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...