Asp.net mvc 4 ASP.NET MVC 4中的ViewBag

Asp.net mvc 4 ASP.NET MVC 4中的ViewBag,asp.net-mvc-4,linq-to-entities,entity-framework-5,viewbag,Asp.net Mvc 4,Linq To Entities,Entity Framework 5,Viewbag,我使用ViewBag将数据传递给View时遇到了问题。 我有一个名为“地点”的模型。它包含{PlaceId、名称、描述、国家、地区、省、地图键} 在控制器中的操作中。我需要将{PlaceId,Name}的位置模型传递给select选项。这是我的密码: 在控制器中: public ActionResult Index() { var place = from p in db.Places select new { p.PlaceId, p.Name};

我使用ViewBag将数据传递给View时遇到了问题。 我有一个名为“地点”的模型。它包含{PlaceId、名称、描述、国家、地区、省、地图键}

在控制器中的操作中。我需要将{PlaceId,Name}的位置模型传递给select选项。这是我的密码:

在控制器中:

public ActionResult Index()
{
    var place = from p in db.Places
                   select new { p.PlaceId, p.Name};
    ViewBag.list = place.ToList();
    return View();
}
+鉴于:

    <select class="form-control" id="Place" name="PlaceId" title="Chose a place">
                @foreach (var item in ViewBag.list)
                {
                    <option value="@item.PlaceId">@item.Name</option>
                }
    </select>

我在这里遇到了错误。此错误为:“对象”不包含“PlaceId”的定义。

此错误的原因是您将匿名对象的集合传递给视图。详细地解释了这个问题,但只是解释一下

默认情况下,匿名对象是内部对象,这意味着它们只能由创建它们的程序集访问。一旦您跨越该程序集边界,它将被视为常规对象,而该对象不具有PlaceId属性

正确的方法是将集合分配给视图模型中的SelectList或IEnumerable属性,或分配给ViewBag

例如,使用视图模型

public SelectList PlacesList { get; set; }
在控制器中

model.PlacesList = new SelectList(db.Places, "PlaceId", "Name");
然后在视图中

@Html.DropDownListFor(m => m.yourProperty, Model.PlacesList)

您正在传递匿名对象的集合。忘记这一点,用正确的方法来做-在控制器中-ViewBag.list=new SelectListdb.Places,PlaceId,Name;在view-@Html.DropDownListForm=>m.yourProperty中,选择ListViewBag.list将有助于解释出现错误的原因