Подтвердить что ты не робот

Как работают аннотации данных?

Я использую аннотации данных в моем проекте ASP.NET MVC 3 для проверки модели. Это очень удобно, но в настоящее время они для меня волшебны. Я читал, что аннотации данных не генерируют исключений. Как известно MVC добавить ошибки проверки в словарь состояния модели? Как не удается установить свойство на модели из-за того, что валидация модели пузырится до MVC, если исключение не выбрасывается? Я всегда предполагал, что исключения были выброшены каждый раз, когда свойство не удалось, и что привязка модели MVC поймала исключение и добавила его в словарь состояния модели.

Чтобы проверить это, я создал консольное приложение и добавил класс образца с аннотацией проверки:

public class MyObject
{
    [StringLength(10, MinimumLength=3)]
    public string Name { get; set; }
}

Затем я создал объект и попытался присвоить значения свойства Name, которые были меньше 3. Свойство, назначенное просто отлично, несмотря на аннотацию, в которой указано, что длина строки меньше 3 не разрешена.

    static void Main(string[] args)
    {
        MyObject mine = new MyObject();
        mine.Name = "hi";
        Console.WriteLine(mine.Name);
        Console.ReadLine();
    }

Эта небольшая программа записывает "привет" на консоль. Зачем? Я ожидал, что он разозлится при попытке установить mine.Name на "привет".

Что мне не хватает?

Спасибо заранее.

4b9b3361

Ответ 1

Вы никогда не вызываете ничего, чтобы проверить свойства. Проверка не происходит волшебным образом сама по себе. от http://msdn.microsoft.com/en-us/library/dd901590%28v=vs.95%29.aspx

Вручную проверять значения

Если вы не используете DataGrid управления для обеспечения интерфейса для редактирование данных, проверка атрибуты не автоматически применяется. Однако вы можете вручную применить проверку проверки, используя Validator класс. Вы можете позвонить ValidateProperty на множестве аксессуар объекта для проверки значение против валидации атрибуты для свойства. Вы должны также установите оба ValidatesOnExceptionsи NotifyOnValidationError свойства true, когда привязка данных для получения исключения проверки из проверки атрибутов. Пример вручную. применение валидации, см. данные Пример привязки ниже.

Ответ 2

С# предоставляет механизм для определения декларативных тегов, называемых атрибуты, которые вы можете разместить на определенных объектах в вашем источнике код для указания дополнительной информации. Информация, которая атрибуты могут быть извлечены во время выполнения через отражение.

https://msdn.microsoft.com/en-us/library/aa288059(v=vs.71).aspx

Вот три статьи, которые помогут расширить ваши знания о том, как работают атрибуты. Последнее является наименее важным, если вы понимаете, как их использовать. Статья предназначена для Silverlight, но по-прежнему применима к данной теме.

Введение в атрибуты

Атрибуты

DataTypeAttributes

Использование аннотаций данных w/silverlight

Ответ 4

потому что вы не проверяете, действительно ли модель... нотация данных проверяет правильность модели. то вы получите свою ошибку.