【问题标题】:Viewbag , Printing data from hashsetViewbag ,从哈希集中打印数据
【发布时间】:2015-06-24 10:13:48
【问题描述】:

我想打印从控制器收到的 viewbag 但我不能,我在控制器中的代码在这里:

var qry = from c in db.Customers
          join o in db.Orders on id equals o.CustomerID
          where id == o.CustomerID
          select new {o.OrderID ,o.OrderDetails};
ViewBag.OrdersForUser = qry.ToList();

我认为的打印代码是:

@foreach (var order in ViewBag.OrdersForUser)
{
   @order
}

现在打印出来的文字是:

{ OrderID = 1, OrderDetails = System.Collections.Generic.HashSet`1[FinalProject.Models.OrderDetail] }

OrderID 的类型是 int,OrderDetails 的类型是 ICollection 我想打印散列集中的数据(而不是像现在这样的声明),并将订单 ID 拆分到其他空间。

【问题讨论】:

  • OrdersForUser 是匿名对象的集合,这些对象是内部的,无法在视图中访问。使用 OrderIDOrderDetails 的 2 个属性创建一个视图模型并填充它 - select new yourModel { .... } 并将其返回到视图。

标签: c# asp.net asp.net-mvc hashset viewbag


【解决方案1】:

ViewBag 是一种动态类型。并且您分配了一个匿名类型,然后您无法在视图侧获取其类型。

控制器

var qry = from c in db.Customers
      join o in db.Orders on id equals o.CustomerID
      where id == o.CustomerID
      // in this line, what is the type of list ? You should define its type
      // for example:
      select new SomeType{OrderId = o.OrderID ,OrderDetails = o.OrderDetails}
      //select new {o.OrderID ,o.OrderDetails}; 

ViewBag.OrdersForUser = qry.ToList();

然后在你的

查看

@foreach (var order in (List<SomeType>)ViewBag.OrdersForUser)
{
   @order
}
  • 从控制器返回的列表,不应该是匿名类型。 (选择新的 SomeType)
  • 在视图中,您应该定义视图包类型。 (List)ViewBag.OrdersForUser)

评论后

或者,如果您的实体之间存在关系定义,您只能获得如下订单详细信息:

控制者:

ViewBag.OrdersForUser = db.OrderDetails.Where(d=>d.Order.CustomerId == id);

查看:

@foreach (var orderDetail in (List<OrderDetail>)ViewBag.OrdersForUser)
{
   @orderDetail.Order.xxx
}

【讨论】:

  • System.Core.dll 中出现“System.InvalidCastException”类型的异常,但未在用户代码中处理其他信息:无法转换“System.Collections.Generic.List@987654325”类型的对象@1[System.Collections.Generic.ICollection`1[FinalProject.Models.OrderDetail]]]'
  • o.OrderDetails var 是 ICollection,我希望它被打印,错误是因为我无法转换它,我尝试了两个:foreach (var order in (List) ViewBag.OrdersForUser) { order } ... 并转换为 OrderDetail 列表
  • 你应该定义一个类似这样的类 CustomerOrder{int OrderId, List OrderDetails}
  • 我创建了这个类,我得到了同样的错误:我的代码是:foreach (var order in (List)ViewBag.OrdersForUser) .... 错误是无法转换类型为“System.Collections.Generic.List1[&lt;&gt;f__AnonymousType52[System.Int32,System.Collections.Generic.ICollection1[FinalProject.Models.OrderDetail]]]' to type 'System.Collections.Generic.List1[FinalProject.Models.CustomerOrder]”的对象。
  • 查看部分:foreach (var order in (List)ViewBag.OrdersForUser) { order }
猜你喜欢
  • 2021-12-25
  • 1970-01-01
  • 2022-12-10
  • 2014-04-01
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
相关资源
最近更新 更多