다음 면도기 부분 뷰가 제공되고 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
foreach가 HTML 렌더링 로직을 렌더링하기위한 것이라면, IEnumberable을 모델에서 반복 할 때 아무 문제가 없습니다. 도우미는 훌륭하지만 MVC 패턴을 손상시키지 않습니다. (@ product.Orders.Where (x => x.Fulfilled) .Count()) –