Как работают аннотации данных? - PullRequest
23 голосов
/ 27 июня 2011

Я использую аннотации данных в своем проекте 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 в "привет".

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

Заранее спасибо.

Ответы [ 4 ]

16 голосов
/ 27 июня 2011

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

Проверка значений вручную

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

3 голосов
/ 27 июня 2011

Как тогда MVC знает, как добавить ошибки валидации в состоянии модели словарь

ModelValidatorProvider , более конкретно, DataAnnotationsModelValidatorProvider . Это называется MVC.

3 голосов
/ 27 июня 2011

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

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

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

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

Атрибуты

DataTypeAttributes

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

0 голосов
/ 11 декабря 2017

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

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