1
次のRazor Partial ViewとProductがNHibernateマップオブジェクトであることを前提として、ここでIEnumerableを呼び出すとデータベースクエリ(キャッシュされていない場合)が発生します。ASP.NET MVC 3:ビュー内で列挙可能な拡張メソッドを使用する
この悪い習慣ですか?コントローラ/ビジネスロジックでこれらの呼び出しを行うことができるように、私はこのビューのデータをもっと見やすく表示する必要がありますか?
@model IEnumerable<MyProject.Data.Models.Product>
<table>
<tr>
<th></th>
<th>Total Orders</th>
<th>Fulfilled</th>
<th>Returned</th>
<th>In stock</th>
</tr>
@foreach (var product in Model) {
<tr>
<td>
@Html.ActionLink(product .Name, "Detail", "Product", new { id = product.Id }, null)
</td>
<td>
@product.Orders.Count
</td>
<td>
@product.Orders.Where(x=>x.Fulfilled).Count()
</td>
<td>
@product.Orders.Where(x=>x.Returned).Count()
</td>
<td>
@(product.Stock.Count - product.Orders.Count)
</td>
</tr>
}
</table>
これは簡単な実用的なやり方のようですが、MVCの観点からは間違っていることが分かりました。 –
はい。 @Htmlでない限り、ビューにコードを書くことが始まるときはいつでも。 'の場合は、アラーム音が鳴り、あなたのビュー/コントローラーをリファクタリングして簡単にする必要があります。 ViewModelsまたはControllerにロジックを入れてください。 –
RPM1984
HTMLレンダリングロジックをレンダリングするためだけであれば、foreachがモデルからIEnumberableをループするのに間違ったことはありません。ヘルパーは素晴らしいですが、MVCパターンを破ることはありません。 (@ product.Orders.Where(x => x.Fulfilled).Count()) –