没有类型为“IEnumerable”的 ViewData 项具有键“键”
本文关键字:ViewData SelectListItem 类型 IEnumerable | 更新日期: 2023-09-27 18:37:14
我的代码是这样的
namespace DiagnosisApp.Models
{
public class ProcedurePrice
{
public int ID { get; set; }
public int DepartmentID { get; set; }
public int ProcedureID { get; set; }
public int InsuranceProviderID { get; set; }
public int ProcedureCategoryID { get; set; }
public int ProcedureSubCategoryID { get; set; }
[ForeignKey("ID")]
public virtual Department Department { get; set; }
[ForeignKey("ID")]
public virtual InsuranceProvider InsuranceProvider { get; set; }
[ForeignKey("ID")]
public virtual ProcedureCategory ProcedureCategory { get; set; }
[ForeignKey("ID")]
public virtual ProcedureSubCategory ProcedureSubCategory { get; set; }
}
}
控制器
public ActionResult Create()
{
ViewBag.DepartmentID = new SelectList(db.Departments, "ID", "Name");
ViewBag.ProcedureSubCategoryID = new SelectList(db.ProcedureSubCategories, "ID", "Name");
return View();
}
在我看来
@Html.DropDownList("ProcedureID", null, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.ProcedureID)
一切对我来说看起来都很好,但它抛出了一个错误
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'ProcedureID'.
谁能指出我在这里做错了什么?
错误在于您在传递 int Html.DropDownList()
时将其放入ViewBag.ProcedureSubCategoryID
ProcedureID
并且您正在传递SelectList
参数null
。一个快速解决方法是将ProcedureSubCategoryID
替换为Html.DropDownList()
中的ProcedureID
作为第一个参数中的键:
您有三种方法可以解决此问题。
方式1:
与其在接受类型 SelectList
的第二个参数中传递null
,不如执行以下操作:
@Html.DropDownList("ProcedureID", ViewBag.ProcedureSubCategoryID as SelectList, new { @class="form-data" })
方式2:
public ActionResult Create()
{
ViewBag.DepartmentID = new SelectList(db.Departments, "ID", "Name");
ViewBag.ProcedureSubCategoryID = new SelectList(db.ProcedureSubCategories, "ID", "Name");
return View();
}
@Html.DropDownList("ProcedureSubCategoryID", null, new { @class = "form-control" })
方式3:
或者另一种方法是将其存储在操作中的ProcedureID
中:
public ActionResult Create()
{
ViewBag.DepartmentID = new SelectList(db.Departments, "ID", "Name");
ViewBag.ProcedureID = new SelectList(db.ProcedureSubCategories, "ID", "Name");
return View();
}
并在视图中:
@Html.DropDownList("ProcedureID", null, new { @class = "form-control" })
我想你错过了类似的东西
ViewBag.ProcedureID = new SelectList(db.ProcedureCategory, "ID", "Name");
我认为你必须初始化ViewBag.ProcedureId