Проверка объекта модели ASP.NET MVC 2 - PullRequest
3 голосов
/ 10 января 2011

Я пытаюсь проверить объект модели вне контекста ModelState внутри контроллера, в настоящее время у меня есть анализатор, который создает объекты модели из файла Excel, и я хочу иметь возможность сообщать, сколько записей было добавлено вбазы данных и сколько не удалось, есть ли способ проверить объект модели на его аннотации данных вне привязки модели?

Я ищу что-то похожее на метод модели рельсов model.valid? или способ длямне самому это реализовать.

Мое текущее решение просто вручную проверяет наличие нескольких ключевых полей, но это дублирует требования между моим классом модели и его метаданными, должен быть лучший способ подключиться к моделипроверка правильности, выполняемая mvc 2.

Спасибо

1 Ответ

2 голосов
/ 10 января 2011

Вы должны использовать класс Validator, который можно найти как часть DataAnnotations.

User userEntity = new User();

var validationContext = new ValidationContext(userEntity, null, null);
var validationResults = new List<ValidationResult>();
DataAnnotations.Validator.TryValidateObject(userEntity, validationContext, validationResults, true);

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

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

Классы метаданных

Если вы используете классы метаданных для определения правил проверки для ваших сущностей, вы должны зарегистрировать классы метаданных до проверки:

TypeDescriptor.AddProviderTransparent(
    new AssociatedMetadataTypeTypeDescriptionProvider(
        typeof(User),
        typeof(UserMetadata)
    ),
    typeof(User)
);

Validator.TryValidateObject(userEntity, context, results, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...