没有..类型的ViewData项.问题

本文关键字:问题 ViewData 类型 没有 | 更新日期: 2023-09-27 18:17:20

我正在一个内部网上工作,确切地说,是在一个活动报告系统上工作,该系统列出了员工每周的活动。所以我可以用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>&nbsp;&nbsp;&nbsp;<%:Html.DropDownList("Employee", (List<SelectListItem>)ViewBag.EmployeeList, "", new { onchange = "this.form.submit();" })%></td>

但是当我选择一个Employee时,它给了我以下错误:

系统。InvalidOperationException:没有'IEnumerable'类型的ViewData项具有'Employee'键。

我觉得很奇怪,因为列表确实填满了名字。

没有..类型的ViewData项.问题

出现错误是因为ViewBag.EmployeeList的值是null(在这种情况下,DropDownList()的回退是使用第一个参数作为IEnumerable<SelectListItem>属性)

由于您已经在GET方法中正确地填充了它,因此发生错误是因为您在POST方法中返回了视图,并且没有重新分配ViewBag.EmployeeList

的值