Как показать другое Обязательное сообщение для экземпляров одного и того же объекта в MVC3? - PullRequest
10 голосов
/ 02 мая 2011

У меня есть проект Razor MVC3, в котором есть две пользовательские записи в форме: одна для ключевого контакта и одна для резервного контакта.Например:

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

Проверка правильности все работает хорошо, за исключением небольшой проблемы, когда пользователь не может заполнить поле, он говорит: «Имя необходимо», но я бы хотел указать пользователю, на которыйодно из полей имени отсутствует.Например, «Требуется резервное имя контакта» или «Требуется имя ключевого контакта».

В идеале я хотел бы оставить аннотацию [Обязательный] для класса, поскольку она используется в других местах.

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

Райан

Ответы [ 3 ]

19 голосов
/ 02 мая 2011

Один из способов добиться этого - использовать отдельную модель представления для этого экрана вместо отдельной модели пользователя со всеми сообщениями об ошибках.В новой модели представления вы можете иметь свойство BackupContactFirstName, свойство KeyContactFirstName и т. Д., Каждое из которых имеет отдельное сообщение об ошибке.(В качестве альтернативы эта модель представления может содержать отдельные пользовательские модели в качестве свойств, но я обнаружил, что проверка клиента Microsoft не подходит для сложных моделей и предпочитает плоские свойства).

Ваша модель представления будет выглядеть следующим образом:

public class MySpecialScreenViewModel
{
    [Required(ErrorMessage = "Backup contact first name is required")]
    public string BackupContactFirstName { get; set; }


    [Required(ErrorMessage = "Key contact first name is required")]
    public string KeyContactFirstName { get; set; }
}

Затем передайте модель представления в представление следующим образом:

@model MySpecialScreenViewModel
...

Действие вашего пост-контроллера будет собирать свойства из модели представления (или сопоставлять их с отдельными моделями пользователей).и передать их соответствующим методам обработки данных.

1 голос
/ 04 июля 2017
[Required(ErrorMessage = "{0} is required")]

{0} = DisplayName автоматически помещается на него

семпл

[DisplayName("Amount per square meter")]
[Required(ErrorMessage = "{0} is required")]
public int PriceMeter { get; set; }

выход

Суммаза квадратный метр требуется

1 голос
/ 28 сентября 2011

Альтернатива, с которой я столкнулся, просто изменить коллекцию ModelState.У него будут элементы в коллекции, названные индексом, например, «User_0__EmailAddress», и вы можете настроить / изменить / заменить коллекцию ошибок, связанную с этим ключом.

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