尝试使用状态初始化SelectList并显示下拉列表时出现以下错误:
值不能为null。参数名称:项目
相关控制器代码:
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" })
答案 0 :(得分:3)
存储在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,而应将其替换为Action中调用View的Model类上的属性:
public List<SelectListItem> States{ get; set; }
视图调整为:
@Html.DropDownListFor(model => model.State, Model.States, new { @class = "form-control" })