我正在内联网上工作,正是在一个列出每周员工活动的活动报告系统上。所以我可以用DropDownList
选择有问题的员工,但我对选择有疑问。
public ActionResult Client() // ReportIndex
{
[...]
string strEmployee = "-1";
string strUser = User.Identity.Name;
if (null != (string)Session["ReportEmployee"])
strEmployee = (string)Session["ReportEmployee"];
[...]
ProjectResourceManagerService pr = new ProjectResourceManagerService(new ModelStateWrapper(this.ModelState));
//nea60
IEnumerable<SelectListItem> pl = pr.ListProject(strUser, strYear, strMonth);
IEnumerable<SelectListItem> pl2 = pr.ListEmployee();
foreach (SelectListItem item in pl)
if (item.Value == strProject)
item.Selected = true;
ViewBag.ProjectList = pl;
foreach (SelectListItem item in pl2)
if (item.Value == strEmployee)
item.Selected = true;
ViewBag.EmployeeList = pl2;
//nea11
Session["ReportYear"] = strYear;
Session["ReportMonth"] = strMonth;
//nea58
Session["ReportProject"] = strProject;
//nea58
return View();
}
如您所见,pl2
包含pr.ListEmployee()
帮助下的员工列表,以下DropDownList
填写:
<td> <%:Html.DropDownList("Employee", (List<SelectListItem>)ViewBag.EmployeeList, "", new { onchange = "this.form.submit();" })%></td>
但是当我选择Employee
时,它会给我以下错误:
System.InvalidOperationException:没有“IEnumerable”类型的ViewData项具有“Employee”键。
我发现它很奇怪,因为列表 填充了名称。
答案 0 :(得分:1)
发生错误是因为ViewBag.EmployeeList
的值为null
(在这种情况下,DropDownList()
的回退是使用第一个参数作为IEnumerable<SelectListItem>
属性。)< / p>
由于您已在GET方法中正确填充它,因此错误发生,因为您在POST方法中返回视图并且未重新分配ViewBag.EmployeeList
的值