我在多个页面的下拉列表中显示数据时遇到了一些问题。 场景:我有5个页面在所有这些页面上具有相同的局部视图。在这个局部视图中,有两个下拉列表。 现在,有两个控制器,一个是家庭控制器,另一个是后控制器。 家庭控制器的索引操作方法是:
public ActionResult Index()
{
List<City> allCity = new List<city>();
using (ApplicationDbContext dc = new ApplicationDbContext())
{
allCity = dc.Cities.OrderBy(a => a.CityName).ToList();
}
ViewBag.CityId = new SelectList(allCity, "Id", "CityName");
return View();
}
现在,在局部视图中,我将数据发送到下拉列表:
@model App.Models.City
<div class="dropdown">
@Html.DropDownList("Id", ViewBag.CityId as SelectList, new { @class = "short_dropdown" })
并将此局部视图呈现给所有页面:
<section class="container">
@Html.Partial("_CommentBox")
现在,如果我看到Home Controller的index.cshtml页面,则下拉列表中的值已正确填充。 但是,如果我去Post控制器的索引页面,那么错误是:**
没有类型为'IEnumerable'的ViewData项具有键'Id'。 System.InvalidOperationException:没有类型为“IEnumerable”的ViewData项具有密钥“Id”。
如何解决这个问题。我是否必须与部分视图一起发送数据。如果是,那么我在一个局部视图中有两个下拉列表,然后是如何为这两个下拉列表发送数据。
答案 0 :(得分:2)
在您的Post控制器中,与您在Home控制器中的操作相同,以便填充ViewBag.CityId
。为了避免代码重复,您可以将其移动到可以重用的单独方法中:
public static List<City> GetCities()
{
using (ApplicationDbContext dc = new ApplicationDbContext())
{
return dc.Cities.OrderBy(a => a.CityName).ToList();
}
}
然后在两者您的控制器中填充ViewBag.CityId
:
ViewBag.CityId = new SelectList(SomeDomain.GetCities(), "Id", "CityName");