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