MVC Dropdownlist向HttpPost返回null

时间:2013-10-17 11:51:05

标签: c# asp.net asp.net-mvc asp.net-mvc-4 html-select

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

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用于显示每个项目的sprint信息。

这是帖子功能:

[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的其余部分正在为sprint信息设置一个表,该表可以正常工作。

我环顾四周,发现了很多帖子,但似乎没有任何帮助。我是mvc的新手,所以我知道它可能很简单,但我无法弄明白。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

更改为

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

或将控件名称更改为

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

答案 1 :(得分:0)

尝试这种简单的方法,并检查它,

  

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

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

[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)

使用断点检查我的代码!

答案 2 :(得分:0)

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

要么改变控制器。

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

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

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

希望这会有所帮助...