下拉列表用于发布表单后抛出错误

本文关键字:出错 错误 表单 用于 布表单 下拉列表 | 更新日期: 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)
相关文章: