0

Razor ビュー (ASP.NET MVC) があります。

私が使うとき

@model IEnumerable<DAL.Models.Product> 

次のように呼び出して、テーブル ヘッダーを作成できます。

@Html.DisplayNameFor(model => model.Name)

しかし、 に変更IEnumerableするときはIQueryable、次のようにインデックスを指定する必要があります。

@Html.DisplayNameFor(model => model[0].Name)

モデルのインデックスを指定する必要があります。それはなぜです?

4

1 に答える 1

1

この回答https://stackoverflow.com/a/14392427/1366901は次のように述べています。

@html.DisplayNameFor は、IEnumerable モデルのオーバーロードがあるという点で特別です。厳密に型指定されたリストがあるため、プロパティの表示名の直後にいることを認識しており、表示名を見つける方法を認識しています。便利な機能です!

これを回避するには 2 つの方法があります。IQueryable で ToList() を呼び出して、コントローラーの IEnumerable にします。

// in your controller, change the return statement to
return resultsQuery.ToList();

または、インデックスを指定する代わりに、FirstOrDefault() を使用できます。これは、IQueryable の要素がゼロの場合でも機能します。

@Html.DisplayNameFor(model => model.FirstOrDefault().Name)
于 2013-11-05T07:38:29.303 に答える