Asp.net mvc 如何在多个页面的部分视图中将列表项发送到下拉列表

Asp.net mvc 如何在多个页面的部分视图中将列表项发送到下拉列表,asp.net-mvc,asp.net-mvc-4,partial-views,html.dropdownlistfor,viewbag,Asp.net Mvc,Asp.net Mvc 4,Partial Views,Html.dropdownlistfor,Viewbag,我在多页下拉显示数据时遇到一些问题。 场景:在所有这些页面上,我有5个页面具有相同的部分视图。在这个部分视图中,有两个下拉列表。 现在,有两个控制器,一个是主控制器,另一个是后控制器。 主控制器的索引操作方法是: public ActionResult Index() { List<City> allCity = new List<city>(); using (ApplicationDbContext dc = new ApplicationDbCont

我在多页下拉显示数据时遇到一些问题。 场景:在所有这些页面上,我有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();
}
public ActionResult Index()
{
List allCity=新列表();
使用(ApplicationDbContext dc=new ApplicationDbContext())
{
allCity=dc.Cities.OrderBy(a=>a.CityName.ToList();
}
ViewBag.CityId=新选择列表(所有城市,“Id”,“城市名称”);
返回视图();
}
现在,在局部视图中,我向下拉列表发送数据,如下所示:

@model App.Models.City

<div class="dropdown">
@Html.DropDownList("Id", ViewBag.CityId as SelectList, new { @class = "short_dropdown" })
<section class="container">
   @Html.Partial("_CommentBox")
@model App.Models.City
@Html.DropDownList(“Id”,ViewBag.CityId作为SelectList,新建{@class=“short\u dropdown”})
并将此局部视图呈现给所有页面,如下所示:

@model App.Models.City

<div class="dropdown">
@Html.DropDownList("Id", ViewBag.CityId as SelectList, new { @class = "short_dropdown" })
<section class="container">
   @Html.Partial("_CommentBox")

@Html.Partial(“\u CommentBox”)
现在,如果我看到Home Controller的index.cshtml页面,则正确填充下拉列表中的值。 但是,如果我转到Post controller的索引页,则错误为:**

没有具有键“Id”的“IEnumerable”类型的ViewData项。 System.InvalidOperationException:没有具有键“Id”的“IEnumerable”类型的ViewData项


如何解决这个问题。我是否必须随局部视图一起发送数据。如果是,则我在一个局部视图中有两个下拉列表,然后如何发送这两个下拉列表的数据。

在Post controller中,与在Home controller中相同,以便填充
ViewBag.CityId
。为了避免代码重复,您可以将其移动到可重用的单独方法:

public static List<City> GetCities()
{
    using (ApplicationDbContext dc = new ApplicationDbContext())
    {
        return dc.Cities.OrderBy(a => a.CityName).ToList();
    }
}

向我们展示Post controller Index Method的代码该消息意味着
ViewBag.CityId
的值为
null
许多用于回答sir的THNK。它可以工作,但我必须在10个控制器中编写相同的代码。是否有办法在相同的@html.Partial()中发送两个ViewBag,然后重新使用它。我是否应该创建一个新的操作方法,返回部分视图并在return语句中发送多视图包。我认为有一种方法,但不知道@Darin Dimitrov您如何编写一个将此值附加到视图包中,然后用它装饰控制器的操作。这样,您就不需要在每个控制器操作中显式地放入此代码。或者,你可以编写一个自定义HTML帮助程序,在你的视图中生成这些选择。看起来它会变得更复杂。我从未尝试过这个OK,我会尝试,但现在,我不知道如何编写。阅读我链接到的文章:这将是一个好的开始。我需要你的帮助,先生,请查看我的问题