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,并且似乎无法正确获取模型,控制器和视图之间的管道无法工作。