C# 剃刀穿过可视包并绑在上面
我有来自控制器的对象列表 看起来像这样C# 剃刀穿过可视包并绑在上面,c#,asp.net,viewbag,C#,Asp.net,Viewbag,我有来自控制器的对象列表 看起来像这样 { Driver = System.Data.Entity.Driver_Driver1, Statuss = NotConfirmed } { Driver = System.Data.Entity.Driver_Driver2, Statuss = NotConfirmed } 请注意,驱动程序是一个复杂类型的对象 控制器: var Drivers = _db.Drivers.Where(x => x.DriverCompanyID == id
{ Driver = System.Data.Entity.Driver_Driver1, Statuss = NotConfirmed }
{ Driver = System.Data.Entity.Driver_Driver2, Statuss = NotConfirmed }
请注意,驱动程序是一个复杂类型的对象
控制器:
var Drivers = _db.Drivers.Where(x => x.DriverCompanyID == id).Where(d => d.CanWorkIn.Where(f => f.CompanyToDriveFor.CompanyID == OwnCompany.CompanyID).Any())
.Select(x => new
{
Driver = x,
Statuss = x.CanWorkIn.FirstOrDefault().Status.ToString()
}).ToList();
ViewBag.ListOfDrivers = Drivers;
return PartialView("_DriverList");
我的模型
public class DriverViewItem
{
public Driver Driver { get; set; }
public string Statuss { get; set; }
}
我的看法
@model List<MyApp.web.Models.DriverViewItem>
最后一点不起作用。模型声明。最好使用模型来传递此类数据。但要直接回答问题,请在控制器中,将其作为项目数组分配给viewbag
ViewBag.Data = {
new { Driver = System.Data.Entity.Driver_Driver1, Status = NotConfirmed },
new { Driver = System.Data.Entity.Driver_Driver2, Status = NotConfirmed }
}
在标记中:
@{
if (ViewBag.Data != null){
foreach (var item in ViewBag.Data) {
//show the item in the view
}
}
}
首先创建一个具有所需属性的强类型类。我给我的司机打了电话 然后在控制器中更改选择以选择此DriverViewItem,并将列表作为模型解析到视图中
var Drivers = _db.Drivers.Where(x => x.DriverCompanyID == id).Where(d => d.CanWorkIn.Where(f => f.CompanyToDriveFor.CompanyID == OwnCompany.CompanyID).Any())
.Select(x => new DriverViewItem()
{
Driver = x,
Statuss = x.CanWorkIn.FirstOrDefault().Status
}).ToList();
return PartialView("_DriverList", Drivers);
在视图中,您需要告诉视图希望使用您的模型,您可以使用:
@model List<DriverViewItem>
然后,您可以像这样迭代项目:
@foreach(DriverViewItem item in Model)
{
<div>
<p>@item.Driver.{what ever property}</p>
<p>@item.Statuss</p>
</div>
}
这是一种比使用ViewBag解析数据更干净的方法。您能否更准确地说明如何将代码添加到ViewBag?您应该使用模型将复杂数据解析到viewI have Linq查询中。选择x=>new{Driver=x,Statuss=x.CanWorkIn.FirstOrDefault.Status}.ToList;您应该考虑强类型化匿名类型,并将列表作为模型从控制器解析为view@AshleyMedway那么,将匿名对象发送到视图中有什么问题?您如何知道OP尚未将强类型视图用于另一个模型?虽然这从技术上回答了这个问题,但这并不好练习。我试过这样做,所以可能是我弄错了模型,公共类DriverViewItem{public Driver Driver{get;set;}公共字符串Status{get;set;}}@user3812199对我来说是正确的。如果看不到代码的其余部分,很难判断?您的代码是否在联机源代码管理中?我在visual studio online上有它。我已更改了代码,添加了ToString on Status=x.CanWorkIn.FirstOrDefault.Status.ToString,并且似乎无法正确获取模型,控制器和视图之间的管道无法工作。