【问题标题】:There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key "key"没有具有键“key”的“IEnumerable<SelectListItem>”类型的 ViewData 项
【发布时间】:2015-03-11 02:01:22
【问题描述】:

我的代码是这样的

 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'.

谁能指出我在这里做错了什么?

【问题讨论】:

  • 我想这个字符串 @Html.DropDownList("ProcedureID", null, new { @class = "form-control" }) 有问题,你应该指定 SelectList 我想像这样 @Html.DropDownList("ProcedureID", Model.ProcedureCategory, new { @class = "form-control" }) 如果你在某处填充这个列表作为前 - 在你的创建控制器中,就像你对 ProcedureSubCategories 所做的那样
  • 很难理解您真正想要绑定的内容。如果你想绑定到int ProcedureID,那么你需要为过程包含一个SelectList(最好使用视图模型,否则ViewBag)并将其用作@Html.DropDownList的第二个参数

标签: c# razor asp.net-mvc-5 entity-framework-6


【解决方案1】:

错误是您在传递ProcedureID int Html.DropDownList() 时将其放入ViewBag.ProcedureSubCategoryID,并且您正在传递SelectList 参数null。一个快速的解决方法是将ProcedureSubCategoryID 替换为Html.DropDownList() 中的ProcedureID 作为第一个参数中的键:

你有三种方法可以解决这个问题。

方式一:

您可以这样做:

@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" })

【讨论】:

    【解决方案2】:

    我想你错过了类似的东西

    ViewBag.ProcedureID = new SelectList(db.ProcedureCategory, "ID", "Name");
    

    我认为你必须初始化 ViewBag.ProcedureId

    【讨论】:

    • 这个!是我需要的谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2020-06-28
    • 2020-08-20
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多