级联下拉列表

时间:2013-05-15 08:52:48

标签: asp.net-mvc-4 razor cascadingdropdown

我正在尝试创建级联下拉列表,我收到错误。

这包含我在我的控制器类中尝试做的事情:

public ActionResult Create()
{
    ViewBag.Status = new SelectList(db.pjt_Statuses, "pjt_Status_ID", "StatusName");
    ViewBag.CategoryID = new SelectList(db.pjt_Categories, "pjt_Category_ID", "CatName");
    return View();
}

public ActionResult SubCategory(int id)
{
    var SubCategory = from s in db.pjt_SubCategories
                      where s.CategoryID == id
                     select s;
    return Json(SubCategory.ToList());
}

// POST: /Project/Create
[HttpPost]
public ActionResult Create(pjt_Projects pjt_projects)
{
    if (ModelState.IsValid)
    {
        pjt_projects.CreationDate = DateTime.Now;
        db.pjt_Projects.Add(pjt_projects);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    ViewBag.Status = new SelectList(db.pjt_Statuses, "pjt_Status_ID", "StatusName", pjt_projects.Status);
    ViewBag.CategoryID = new SelectList(db.pjt_Categories, "pjt_Category_ID", "CatName", pjt_projects.CategoryID);
    return View(pjt_projects);
}

查看

这显示了我在前端尝试做的事情。我在下面的视图代码中使用粗体显示错误。我得到的错误是:

  

没有IEnumerable<SelectListItem>类型的ViewData项具有键pjt_SubCat_ID

代码:

<div class="span3 offset1">
    @Html.LabelFor(model => model.CategoryID, "Category")
    @Html.DropDownList("CategoryID", String.Empty)@*, null, new { @onchange = "FetchSubCategories();" })*@
    <br />
    @Html.ValidationMessageFor(model => model.CategoryID)
</div>
<div class="span3 offset1">
    <label>Sub Category</label>
        @Html.DropDownList("pjt_SubCat_ID", String.Empty)
    <br />
    @Html.ValidationMessageFor(model => model.SubCategoryID)
</div>

有人可以告诉我这里出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

问题是引擎正试图从viewbag获取SelectList,但却无法找到它。我猜你希望Dropdown显示你在“pjt_SubCat_ID”下的viewbag中存储的项目,但是你没有将这个项目添加到你在问题中列出的代码中的任何位置。

如果这应该是从SubCategory()方法返回的数据,您将无法在viewbag中找到该数据,并且您应该在原始SelectList的click事件上调用此方法的javascript(类别ID为1) )并将返回的数据绑定到子类别1。