Передача SelectList в DropDownListFor через ViewBag - PullRequest
0 голосов
/ 11 октября 2018

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

Значение не может быть нулевым.Имя параметра: элементы

Соответствующий код контроллера:

            var states = new List<SelectListItem>
            {
                new SelectListItem() { Value = "MO", Text = "Missouri" },
                new SelectListItem() { Value = "KS", Text = "Kansas" },
                new SelectListItem() { Value = "AR", Text = "Arkansas" }
            };
            ViewBag.StateList = states;
            return RedirectToAction("Register2", "Account");

Код вида:

@Html.DropDownListFor(model => model.State, new SelectList(ViewBag.StateList, "Value", "Text"), new { @class = "form-control" })

1 Ответ

0 голосов
/ 11 октября 2018

Данные, хранящиеся в ViewBag, сохраняются для одного HTTP-запроса, поэтому обычно они используются для передачи данных из Action в его View.

При использовании RedirectToAction данные в ViewBag.StateList теряются.

Вы можете:
• Создать объект states внутри действия Register2.

• Если вы не можете переместить объект states, вы можете использовать TempData вместо ViewBag, и данные перенесут перенаправление.

var states = new List<SelectListItem> {
    new SelectListItem() { Value = "MO", Text = "Missouri" },
    new SelectListItem() { Value = "KS", Text = "Kansas" },
    new SelectListItem() { Value = "AR", Text = "Arkansas" }
};

TempData["StateList"] = states;

Но вам придется привести его к списку в представлении:

@{ 
    var states = (IEnumerable<SelectListItem>)TempData["StateList"];
}
@Html.DropDownListFor(model => model.State, new SelectList(states, "Value", "Text"), new { @class = "form-control" })

• Лучшим вариантом является не полагаться на ViewBag / ViewData, а вместо этого заменить его насвойство вашего класса Model в действии, вызывающее представление:

public List<SelectListItem> States{ get; set; }

с представлением, настроенным на:

@Html.DropDownListFor(model => model.State, Model.States, new { @class = "form-control" })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...