Asp.net mvc 4 ASP.NET MVC 4中的ViewBag
我使用ViewBag将数据传递给View时遇到了问题。 我有一个名为“地点”的模型。它包含{PlaceId、名称、描述、国家、地区、省、地图键} 在控制器中的操作中。我需要将{PlaceId,Name}的位置模型传递给select选项。这是我的密码: 在控制器中: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};
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将有助于解释出现错误的原因