我在控制器中有一个列表如下:
public class TruckData
{
public string Truck{ get; set; }
}
var truckdat = (from p in KowaDataContext.tblTrucks
orderby p.Truck
select new TruckData {Truck= p.Truck});
var trucklist = truckdat.ToList();
ViewBag.TrckList= trucklist;
视图如下所示:
@foreach (Data.Rep.Controllers.TruckController.TruvckData item in ViewBag.TrckList)
{
<tr>
<td>
@item.Truck
</td>
</tr>
}
我的问题是,如何在不使用类的情况下将列表传递给视图:
public class TruckData
{
public string Truck{ get; set; }
}
以便我的列表如下所示:注意如何对TruckData的引用如下:
var truckdat = (from p in KowaDataContext.tblTrucks
orderby p.Truck
select new {Truck= p.Truck});
var trucklist = truckdat.ToList();
ViewBag.TrckList= trucklist;
我不确定视图中的foreach会是什么样子。我尝试了下面显示的但是给了我一个问题。
@foreach (var item in ViewBag.TrucksSelectList)
答案 0 :(得分:10)
不,这是不可能的。您无法将匿名对象传递给视图。原因是编译器将匿名对象作为内部发出。由于ASP.NET动态地将视图编译为单独的程序集,因此无法访问此模型。
我的问题是,如何在不使用类的情况下将列表传递给视图:
这将违反所有良好做法=&gt;你需要使用一个视图模型:
var truckdat =
from p in KowaDataContext.tblTrucks
orderby p.Truck
select new TruckData { Truck = p.Truck };
ViewBag.TrckList = truckdat.ToList();
然后在视图中:
@foreach (var item in (IEnumerable<TruckData>)ViewBag.TrckList)
{
<div>@item.Truck</div>
}
由于您有一个字符串列表,您可以将其用作模型:
var truckdat =
from p in KowaDataContext.tblTrucks
orderby p.Truck
select p.Truck;
ViewBag.TrckList = truckdat.ToList();
然后在视图中:
@foreach (var item in (IEnumerable<string>)ViewBag.TrckList)
{
<div>@item</div>
}
我也强烈建议你摆脱ViewBag并使用强类型视图模型:
public ActionResult Foo()
{
IEnumerable<TruckData> model =
from p in KowaDataContext.tblTrucks
orderby p.Truck
select new TruckData { Truck = p.Truck };
return View(model);
}
然后:
@model IEnumerable<TruckData>
@foreach (var item in Model)
{
<div>@item.Truck</div>
}
引入TruckData类型的显示模板(~/Views/Shared/DisplayTemplates/TruckData.cshtml
):
@model TruckData
<div>@Model</div>
你甚至可以在主视图中摆脱丑陋无用的foreach循环:
@model IEnumerable<TruckData>
@Html.DisplayForModel()