我的问题是我正在尝试设置一个下拉列表,当选择一个新项目时,它将更新我拥有的信息表,但每次调用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的新手,所以我知道它可能很简单,但我无法弄明白。
感谢您的帮助。
答案 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)
希望这会有所帮助...