【问题标题】:The ViewData item that has the key 'JobTitleID' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>'?具有键“JobTitleID”的 ViewData 项的类型为“System.Int32”,但必须为“IEnumerable<SelectListItem>”类型?
【发布时间】:2013-10-22 09:52:42
【问题描述】:

按照教程,并按步骤进行操作,但当我想编辑字段时出现错误。

来源错误:

     </div>
     <div class="editor-field">
         @Html.DropDownList("JobTitleID", String.Empty)
         @Html.ValidationMessageFor(model => model.JobTitleID)
     </div>

这是我的控制器:

// POST: /Employee/Create

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "SIN, FirstName, MiddleName, LastName, StartDate, Salary, JobTitleID, DepartmentID")] Employee employee)
    {
        try
        {

            if (ModelState.IsValid)
            {
                db.Employees.Add(employee);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
        }
        catch (DataException dex)
        {
            if (dex.InnerException.InnerException.Message.Contains("IX_Employee_SIN"))
            {
                ModelState.AddModelError("SIN", "Unable to save changes. Remember, you cannot have duplicate SIN numbers.");
            }
            else
            {
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
            }
        }

        DepartmentDropDownList(employee.DepartmentID);
        JobDropDownList(employee.JobTitleID);
        return View(employee);
    }

    //
    // GET: /Employee/Edit/5

    public ActionResult Edit(int id = 0)
    {
        Employee employee = db.Employees.Find(id);
        if (employee == null)
        {
            return HttpNotFound();
        }
        DepartmentDropDownList(employee.DepartmentID);
        JobDropDownList(employee.JobTitleID);
        return View(employee);
    }

    //
    // POST: /Employee/Edit/5

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "ID, SIN, FirstName, MiddleName, LastName, StartDate, Salary, JobTitleID, DepartmentID")] Employee employee)
    {
        try
        {

            if (ModelState.IsValid)
            {
                db.Employees.Add(employee);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

        }
        catch (DataException dex)
        {
            if (dex.InnerException.InnerException.Message.Contains("IX_Employee_SIN"))
            {
                ModelState.AddModelError("SIN", "Unable to save changes. Remember, you cannot have duplicate SIN numbers.");
            }
            else
            {
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
            }
        }

        DepartmentDropDownList(employee.DepartmentID);
        JobDropDownList(employee.JobTitleID);
        return View(employee);
    }


   private void JobDropDownList(object selectedJob = null)
    {
        var dQuery = from d in db.JobTitles
                     orderby d.Title
                     select d;
        ViewBag.JobID = new SelectList(dQuery, "ID", "Title", selectedJob);
    }
    private void DepartmentDropDownList(object selectedDepartment = null)
    {
        var dQuery = from d in db.Departments
                     orderby d.DepartmentName
                     select d;
        ViewBag.DepartmentID = new SelectList(dQuery, "ID", "DepartmentName",selectedDepartment);
    }

我对 MVC 并不是很熟悉,只是想问一下问题是什么,以及如何解决它。

【问题讨论】:

  • 您使用的是哪个版本的 MVC?您似乎正在尝试使用此扩展方法:msdn.microsoft.com/en-us/library/dd504970(v=vs.108).aspx - 也许它是在比您使用的版本晚的版本中引入的?
  • 错误提示您正在尝试将一个整数绑定到一个下拉列表,该下拉列表需要一个 IEnumerable 的选择列表项
  • 不清楚您的 DepartmentDropDownListJobDropDownList 方法是做什么的,顺便说一句 - 这可能是问题...
  • 试试@Html.DropDownList("JobID", String.Empty)
  • 尝试按字母顺序排列。

标签: c# html asp.net-mvc


【解决方案1】:

ViewBag 在内部封装了ViewData,因此,您收到的消息是关于 ViewBag 的。您已经在控制器上设置了ViewBag.JobID,并且在您看来,您正在尝试使用另一个键JobTitleID。尝试使用右键:

@Html.DropDownList("JobID", String.Empty)

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 2014-10-02
    • 2012-01-25
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多