下拉列表用于发布表单后抛出错误
本文关键字:出错 错误 表单 用于 布表单 下拉列表 | 更新日期: 2023-09-27 18:35:39
为什么我不能让它工作?
控制器:
List<SelectListItem> list = new List<SelectListItem>() {
new SelectListItem(){ Value="1", Text="Bohuslän"},
new SelectListItem(){ Value="2", Text="Dalarna"},
new SelectListItem(){ Value="3", Text="Dalsland"}
};
SelectList surbs = new SelectList(list, "Value", "Text");
ViewBag.Dropdown = surbs;
return view();
使用视图模型
public class CreateViewModel
{
public int SelectedId { get; set; }
public Add Add { get; set; }
}
视图:
@Html.DropDownListFor(model => model.SelectedId, (SelectList)ViewBag.Dropdown)
发布到控制器
public ActionResult Create(CreateViewModel adds)
{
if (ModelState.IsValid)
{
Add add = new Add();
..
错误:
具有键"SelectedId"的 ViewData 项的类型为"System.Int32",但必须为"IEnumerable"类型。
您的问题是回发后,ViewBag.Dropdown
的值不保留,其值为 Null
,因此会引发此错误。要么在HTTP POST方法中再次设置ViewBag
中的数据,如下所示:-
public ActionResult Create(CreateViewModel adds)
{
if (ModelState.IsValid)
{
Add add = new Add();
------
List<SelectListItem> list = new List<SelectListItem>() {
new SelectListItem(){ Value="1", Text="Bohuslän"},
new SelectListItem(){ Value="2", Text="Dalarna"},
new SelectListItem(){ Value="3", Text="Dalsland"}
};
SelectList surbs = new SelectList(list, "Value", "Text");
ViewBag.Dropdown = surbs;
return View();
您可以将其包装在方法中以避免代码重复。
或者在我看来最好的方法是不是在ViewBag
中传递数据,而是将SelectList
属性添加到您的 ViewModel,然后传递如下内容:-
更新的视图模型:-
public class CreateViewModel
{
public int SelectedId { get; set; }
public string Add { get; set; }
public SelectList SurbsList { get; set; }
}
对于获取和发布请求,请像这样绑定您的SurbsList
:-
adds.SurbsList = GetSurbs();
其中,GetSurbs() 是一个方法:-
private SelectList GetSurbs()
{
List<SelectListItem> list = new List<SelectListItem>()
{
new SelectListItem(){ Value="1", Text="Bohuslän"},
new SelectListItem(){ Value="2", Text="Dalarna"},
new SelectListItem(){ Value="3", Text="Dalsland"}
};
return new SelectList(list, "Value", "Text");
}
最后像这样绑定您的下拉列表:-
@Html.DropDownListFor(model => model.SelectedId, Model.SurbsList)