Использование DropDownListFor в сочетании с ValidationMessageFor - PullRequest
0 голосов
/ 07 ноября 2019

В настоящее время я пытаюсь объединить функции Html Helper DropDownListFor и ValidationMessageFor. Я использую asp.Net MVC 5 и сгенерировал модель. Моя цель - иметь HTML-поле выбора, которое генерируется функцией DropDownListFor. Это должно быть связано с моей моделью. Предполагается, что клиент вводит что-то в поле во внешнем интерфейсе в поле выбора. Если клиент ничего не вводит и нажимает кнопку отправки в моей форме, следует использовать функцию ValidationMessageFor, чтобы отобразить текст ошибки, который я ввел в модель. Конечно, форма не должна быть действительной, и клиенту нельзя разрешать продолжать, пока в поле выбора ничего не выбрано. Это теория.

Как уже упоминалось, я создал модель. Это выглядит так:

public class ExampleModel
{        
    [Required(ErrorMessage="Test-Error-Text")]
    public string salutation { get; set; }
}

Я устанавливаю значения в поле выбора в контроллере следующим образом:

var collection = new ListItemCollection();
collection.Add(new ListItem("Mr"));
collection.Add(new ListItem("Mrs"));
collection.Add(new ListItem("unknown"));
collection.Add(new ListItem("company"));

var selList = new SelectList(collection, "Salutation");
ViewBag.Salutation = selList;

Затем я вызываю функции в представлении следующим образом:

@Html.DropDownListFor(Model=> Model.salutation, ViewBag.Salutation as SelectList, "", new { @class="adrInput form-control"})            
@Html.ValidationMessageFor(Model=>Model.salutation)

Поскольку это в настоящее время, я получаю следующее исключение при отправке:

System.InvalidOperationException: 'There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'salutation'.'

Я почти никогда не работал с этими функциями Html Helper. Что-то здесь не так. Я благодарен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

Я нашел ошибку. Я должен вернуть модель в представление после отправки формы, если форма недействительна. Кроме того, я должен снова инициализировать SelectList для ViewBag. Каким-то образом значения теряются в ViewBag.Salutation после проверки.

0 голосов
/ 08 ноября 2019

В вашем ПРОСМОТРЕ может быть что-то подобное?

@model IEnumerable<Sample1.Models.ExampleModel>

Если это так, удалите "IEnumerable" и просто сделайте:

@model Sample1.Models.ExampleModel
...