Данные, хранящиеся в 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" })