在动态类型视图</anonymous>中使用IEnumerable <anonymous type =“”>

时间:2012-08-09 18:08:42

标签: c# asp.net-mvc razor

var s = myInventoryEntities.p_Forms().Select(i => new  { i.Customer, i.Order_ID }).Distinct().ToList();

ViewBag.MyData = s;

return View();

这给了我

    { Customer = "Bob", Order_ID = 2644550 }

在我的剃刀代码中

我遍历数据

@foreach ( var x in @ViewBag.MyData){
x.Customer // Does not exist! :(
}

请帮忙!

'object'不包含'Customer'的定义

1 个答案:

答案 0 :(得分:2)

ViewBag数据的生命周期非常有限。您确定要从设置ViewBag数据的相同操作方法进入此视图吗?

建议:尽量避免动态类型liek ViewData / ViewBag。坚持强类型使您的代码更易于阅读/维护。

如果您的域对象和要显示的内容相同,请不要打扰创建ViewModel。否则创建一个viewmodel

public class CustomerOrder
{
  public string CustomerName
  public int OrderID { set;get;}
  //other properties as relevant (to the view)
}

并返回而不是ViewBag

public ActionResult GetOrders()
{

  var s = myInventoryEntities.p_Forms().
          Select(i => new  CustomerOrder {
                                           CustomerName= i.Customer, 
                                           OrderID=i.Order_ID
                                         }).Distinct().ToList();
  return View(s);
}

在视图中

@model IList<CustomerOrder>
@foreach ( var x in Model)
{
   <p>@x.Customer</p>
}