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>

「オブジェクト」には「No_」の定義が含まれていません

No_ = s.No_ などを追加しようとしましたが、それも役に立ちません。私は何を間違っていますか?

4

2 に答える 2

1

ここで重複した質問: Razor の動的匿名型が RuntimeBinderException を引き起こす

これは、匿名型が内部のコントローラーで渡されるため、宣言されているアセンブリ内からのみアクセスできるためです。ビューは個別にコンパイルされるため、ダイナミック バインダーは、そのアセンブリ境界を超えることができないと文句を言います。

基本的に、匿名の動的オブジェクトに対してこの方法でバインドすることはできません。これを回避するには、特定のクラスまたは構造体を定義します。

于 2013-08-14T13:00:20.070 に答える