Проверка модели на основе DataType - PullRequest
4 голосов
/ 08 марта 2012

У меня есть проект с классической трехуровневой структурой: DataStore, BusinessLogic, Web-Frontend

В DataStore у меня есть модель (упрощенная), например ConfigModel.cs:

public class ConfigModel
{

    [DataType(DataType.EmailAddress)]
    public string DefaultSenderEmail { get; set; }

    public IPAddress FallbackDNS { get; set; }

}

Здесь возникает вопрос:

Какой элегантный способ программно добавить валидаторы в соответствии с фактическим типом данных или атрибутом типа данных?

Несколько ответов, которые яДо сих пор считал себя, но не нашел их удовлетворительными:

  • Добавить атрибут проверки [EmailAddress] к параметру: я не хочу дублирования и не хочу никаких ссылокв специальный код MVC в моем слое хранилища данных.

  • Создайте отдельные модели ViewModel и используйте AutoMapper: поскольку некоторые из моих моделей намного сложнее, я бы не хотел создавать конкретные модели ViewModel.

Спасибо!

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Я бы также подумал об использовании AutoMapper, но не как ответ на это решение.

Может быть, вы можете рассмотреть это: http://weblogs.asp.net/srkirkland/archive/2011/02/15/adding-client-validation-to-dataannotations-datatype-attribute.aspx

0 голосов
/ 08 марта 2012

Это не дублирование.DataType используется для разных целей, а валидация - это другое.Хотя они могут звучать одинаково (специально для EmailAddress), вы не должны рассматривать их как дублирование.Более того, валидация автоматически контролируется для необнуляемых типов - они помечаются как Required.Datetime также проверяется на действительный формат автоматически.

Что вам определенно не понравится, так это то, что вы можете контролировать, какие свойства вашей доменной модели могут редактировать пользователи, используя BindAttribute , и контролировать разные проверки на одной и той же модели при использовании разных представлений.Так что пользуйтесь ViewModels!Украсьте их всеми атрибутами, необходимыми для вашего веб-приложения, и сопоставьте их с моделями доменов, используя AutoMapper

. Вы также можете проверить FluentValidation

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