Проверка MVC в модели

В настоящее время я использую DataAnnotations для проверки моего приложения MVC 2. Однако я столкнулся с небольшой проблемой.

В настоящее время у меня есть объект типа User, который имеет ряд свойств. Все это необходимо.

public class User
    {

        [Required(ErrorMessage = "Username is required")]
        public string Username { get; set; }

        [Required(ErrorMessage = "Password is required")]
        public string Password { get; set; }

        [Required(ErrorMessage = "Email is required")]
        public string Email { get; set; }

        [Required(ErrorMessage = "First name is required")]
        public string Firstname { get; set; }

        [Required(ErrorMessage = "Last name is required")]
        public string Lastname { get; set; }


    }

При регистрации все они отображаются с помощью привязки моделей, и все работает отлично. Однако на странице «изменить мои данные» можно обновить только имя, фамилию и адрес электронной почты. Всякий раз, когда представление отправляется обратно и применяется привязка модели, я получаю предупреждение. Имя пользователя / пароль является обязательным полем. Хотя на данный момент это не требуется. Я придумал два способа обойти это, ни один из которых, как мне кажется, не подходит (но может ошибаться).

1: Создайте собственную модель просмотра. Это будет работать нормально, но к этой модели представления нужно будет применить аннотации к данным, что означает дублирование проверки модели и объекта пользователя.

2: Включите все поля в визуализированный вид и отправьте их обратно. Это имеет риски для безопасности, кажется действительно беспорядочным и плохо масштабируется для сложных моделей просмотра.

Может ли кто-нибудь порекомендовать лучший способ для этой ситуации?


person WDuffy    schedule 30.05.2010    source источник


Ответы (2)


Недавно был подобный вопрос: Необходимо скопировать свойства перед проверкой . В ответ я предложил создать собственный ModelBinder для использования только в этом конкретном действии, и я по-прежнему считаю это лучшим решением.

person tpeczek    schedule 30.05.2010
comment
Спасибо за ссылку @tpeczek. Ваше решение - хороший вариант, однако я решил перейти к настройке 1: 1 View: ViewModel после прочтения сообщения Джимми Богарда на lostechies.com/blogs/jimmy_bogard/archive/2009/06/29/. - person WDuffy; 31.05.2010

person    schedule
comment
Подобные ответы, содержащие только код, не помогают сообществу. Уточните, как это отвечает на исходный вопрос? - person Werner; 14.03.2014