MVC Dropdownlist returns null to HttpPost



我的问题是我正在尝试设置一个下拉列表,当选择一个新项目时,它将更新我拥有的信息表,但每次调用 HttpPost 函数时,参数总是为空。这是我的家庭控制器的索引功能:

public ActionResult Index()
{
   Project[] projects = db.Projects.ToArray();
   List<SelectListItem> dropList = new List<SelectListItem>();
   BurndownSprintTable[] TableToShow = db.BurndownSprintTables.ToArray();
   for (int index = 0; index < projects.Length; ++index)
        {
            dropList.Add(new SelectListItem { Text = projects[index].Name, Value = projects[index].Id.ToString(), Selected = projects[index].Selected });
            if (projects[index].Selected == true)
            {
                int ProjectId = projects[index].Id;
                TableToShow = db.BurndownSprintTables.Where(x => x.ProjectId == ProjectId).ToArray();
            }
        }
  ViewBag.Projects = dropList;
  return View(TableToShow);
}

TableToShow 用于显示每个项目的冲刺信息。

这是发布功能:

[HttpPost]
    public ActionResult ProjectUpdate(string strProjectId)
    {
      return View("Index");
    }

我意识到这个 post 函数会导致一个错误,我相信我可以自己修复,但我需要 strProjectId 不为空。

这是 html:

@model IEnumerable<TableauConfigWebService.Models.BurndownSprintTable>
@using (Html.BeginForm("ProjectUpdate", "Home", FormMethod.Post))
{
<h5>@Html.DropDownList("Id", (IEnumerable<SelectListItem>)ViewBag.Projects)
<input type="submit" value="Update" /></h5>
}

还有更多内容,但 html 的其余部分是为冲刺信息设置一个表格,效果很好。

我环顾四周,发现了一堆关于此的帖子,但似乎都没有帮助。我是 mvc 的新手,所以我知道它可能很简单,但我无法弄清楚。

感谢您的任何帮助。

更改为此

         [HttpPost]
           public ActionResult ProjectUpdate(string Id)
                {
                    return View("Index");
                }

或者将控件"名称"更改为

      @Html.DropDownList("strProjectId", (IEnumerable<SelectListItem>)ViewBag.Projects)

试试这个简单的方法,并检查一下,

必须同名是下拉列表和模型属性。

但是你可以尝试这种简单的方式

[HttpPost]
    public ActionResult ProjectUpdate()
    {
     **string strProjectId=Request.Form["strProjectId"].ToString();**//Or use Request["strProjectId"].ToString();
      return View("Index");
    }
@Html.DropDownList("**strProjectId**", (IEnumerable<SelectListItem>)ViewBag.Projects)

简单地说,你可以使用FormCollection,比如,

[HttpPost]
        public ActionResult ProjectUpdate(FormCollection collection)
        {
         **string strProjectId=collection["strProjectId"].ToString();**
          return View("Index");
        }
    @Html.DropDownList("**strProjectId**", (IEnumerable<SelectListItem>)ViewBag.Projects)

并使用断点检查我的代码!

在视图中的位置和控制器中使用相同的参数名称。

控制器中的任一更改。

public ActionResult ProjectUpdate(string Id)
    {
      return View("Index");
    }

或者将视图下拉代码更改为此代码。

@Html.DropDownList("strProjectId", (IEnumerable<SelectListItem>)ViewBag.Projects)

希望这有帮助...

最新更新