1. Частичные представления - ваш друг
Используйте RenderPartial и разделяйте частичные представления для любого элемента, попадающего в цикл. Это также может помочь с живым обновлением с помощью ajax, потому что вы можете очень легко получить отрендеренный HTML для одного элемента без обновления страницы.
<% foreach (var item in Model.List) { %>
<div class="item">
<%= item.ProductID %> - <%= Html.SomeHelper(item.Description, 32000) %>
<div class="itemsub">(<%= Html.SomeOtherHelper(item.Customer) %>,
<%= Tools.AnotherHelper(item.OrderDate, item.ShipDate) %>)</div>
</div>
<% } %>
Кому:
<% foreach (var item in Model.List)
Html.RenderPartial("itemTemplate", item ); %>
2. Заставьте ViewModel тянуть вес
Делайте намного больше манипуляций со строками и логикой в ваших моделях представления вместо загрузки с помощью одноразовых Html-помощников или аналогичных. Может быть, поставить HtmlEncoding в ваших установщиков свойств ViewModels? Или используйте методы, такие как GetBoldedFirstName () в вашей ViewModel
Теперь это немного запутывает разделение между C # и HTML-разметкой, НО ваша HTML-разметка поблагодарит вас за чистоту. Лично мне не нравится, когда вокруг всплывают сотни одноразовых помощников, и я думаю, что эта техника делает разметку лучше читаемой.
<div class="item">
<%= item.ProductID %> - <%= Html.SomeHelper(item.Description, 32000) %>
<div class="itemsub">(<%= Html.SomeOtherHelper(item.Customer) %>,
<%= Tools.AnotherHelper(item.OrderDate, item.ShipDate) %>)</div>
</div>
Кому:
<div class="item">
<%= item.ProductID %> - <%= item.FormattedDescription(3200) %>
<div class="itemsub">
(<%= item.GetCustomerName() %>,
<%= item.GetPrettyOrderStatusString() )
</div>
</div>
3. Использовать пустой вид
Я стараюсь сделать свою разметку настолько глупой, насколько это возможно, и предпочитаю вносить как можно больше логики в реальную модель представления или метод действия, которые я могу.
Для «пустых» страниц, которые я пытаюсь сделать, это создать общий вид для всех моих пустых сеток, как если бы вы сделали одну страницу 404 для веб-сайта. Ваш контроллер должен знать, что вам нечего показать, и вернуть соответствующий вид.
Вы сэкономите много вложений и Count> 0 / empty / null проверка в вашей разметке.
У Роба Коннери есть отличная статья на эту тему:
http://blog.wekeroad.com/blog/asp-net-mvc-avoiding-tag-soup/