Исключить поля из проверки модели

Допустим, у меня есть следующий ViewModel :

    public class PersonViewModel
    {
        [Required]
        public String Email { get; set; }

        [Required]
        public String FirstName { get; set; }

        [Required]
        public String LastName { get; set; }
    }

Это ViewModel, а не оригинальный Entity, я использую эту модель в двух местах, в первом я хочу проверить все поля, а в другом я хочу исключить поле Email из проверки модели. Можно ли как-то указать, чтобы исключить поля из проверки?


person saber    schedule 28.04.2013    source источник


Ответы (2)


Вы можете использовать

ModelState.Remove("Email");

удалить записи в состоянии модели, связанные со скрытыми полями.

Лучшее решение - разделить модель представления на две:

public class PersonViewModel
{
    [Required]
    public String FirstName { get; set; }

    [Required]
    public String LastName { get; set; }
}

public class PersonWithEmailViewModel : PersonViewModel
{
    [Required]
    public String Email { get; set; }
}
person LukLed    schedule 28.04.2013
comment
Спасибо за ответ, но как насчет использования [Bind(Exclude = "IsAdmin")] ? - person saber; 28.04.2013
comment
@EAmani: Bind исключает привязку, а не проверку. Если вы не хотите иметь эти проблемы, создайте выделенную модель представления. - person LukLed; 28.04.2013
comment
Отличный ответ, я разделил один класс на два и сделал один суперкласс другого, упростил мою проверку - person mut tony; 08.03.2018

Уродливое решение:

ModelState.Remove("Email");

Рекомендуемое решение:
Создайте еще одну ViewModel. Предполагается, что виртуальная машина представляет ваше представление, поэтому, если в вашем представлении нет поля электронной почты, создайте для него подходящую виртуальную машину.

person Artless    schedule 28.04.2013
comment
Спасибо за ответ, да, вы правы, лучше создать другую виртуальную машину для моего второго представления. - person saber; 28.04.2013