2

对于我的一生,我无法弄清楚为什么会这样。我只是通过链接调用一些数据并将其传递给视图。当我像这样直接传递数据时它可以工作:

var invoices = (
  from s in navdb.Sales_Invoice_Header
  where s.Salesperson_Code == repCode
  where s.Posting_Date > date
  select s
).ToList();

但是当我动态创建匿名类型时,它不会,如下所示:

var invoices = (
  from s in navdb.Sales_Invoice_Header
  where s.Salesperson_Code == repCode
  where s.Posting_Date > date
  select new { 
    s.No_,
    s.Bill_to_Customer_No_,
    s.Bill_to_Name,
    s.Salesperson_Code
  }
).ToList();

之后像这样访问它时:

<table>
@foreach (var invoice in ViewBag.invoices)
{ 
<tr>
    <td>@invoice.No_</td>
    <td>@invoice.Bill_to_Customer_No_</td>
    <td>@invoice.Bill_to_Name</td>
    <td>@invoice.Salesperson_Code</td>
</tr>
}
</table>

我只是得到一个:'object'不包含'No_'的定义

我试过添加 No_ = s.No_ 等等,这也无济于事。我究竟做错了什么?

4

2 回答 2

1

此处重复问题:Razor 中的动态匿名类型导致 RuntimeBinderException

这样做的原因是匿名类型在内部的控制器中传递,因此只能从声明它的程序集中访问它。由于视图是单独编译的,因此动态绑定器抱怨它不能越过该程序集边界。

基本上,您不能以这种方式绑定匿名动态对象。定义一个特定的类或结构来解决这个问题。

于 2013-08-14T13:00:20.070 回答
0

在你的第一个例子中,你得到一个List<whatever s is>,在你的第二个例子中,你得到一个List<object>. 和'object' does not contain a definition for 'No_'

于 2013-08-14T10:49:08.087 回答