что является лучшим местом для реализации группировки данных в ASP.net MVC - PullRequest
1 голос
/ 15 марта 2010

Я пытаюсь сгруппировать коллекцию данных и отправить ее в представление, где требуется другой уровень группировки. Я попытался сделать это на уровне модели, но зацикливание через сгруппированный сбор становится очень трудным, и определение типа данных для передачи в частичное не легко

Группирование на уровне просмотра выглядит легко осуществимым, но я хочу избежать этого, есть ли способ сделать это?

код: модель представляет собой набор ресторанов, которые следует сначала сгруппировать по категориям, а затем по имени, чтобы получить другой адрес

 <% foreach (var categoryGroup in Model.GroupBy(r => r.RestaurantCategory)){%>

    <h1><%=categoryGroup.Key %></h1>

            <% foreach (var restaurant in categoryGroup.GroupBy(c => c.RestaurantName)){%>
                <%Html.RenderPartial("Restaurant", restaurant); %>
            <%}%>
    <%}%> 

Частичный код:

<ul class="addressList">
<%foreach (var address in Model){%>
<li>

    <%= Html.Encode(address.Address1)%>
    <%= Html.Encode(address.City)%>   
    <%=string.Format("<a href='http://www.bing.com/maps/default.aspx?where1={0}' target='_blank'> Get Directions</a>", address.FullAddress)%> 
</li>
<%}%>

</ul>

Ответы [ 2 ]

2 голосов
/ 15 марта 2010

Группирование на уровне просмотра выглядит легко осуществимым, но я хочу избежать этого, есть ли способ сделать это?

Почему именно эта проблема?Слой модели не должен иметь подробностей реализации для представления.Он должен просто иметь данные, которые будут использоваться представлением для представления информации вашим пользователям.Нет причин, по которым другое представление не могло бы использовать ту же модель для отображения данных другим способом.Если вы хотите выполнить форматирование данных в другом месте, кроме представления, вам нужно добавить еще один слой, например, снимок концепции модели представления.

Поскольку представление отображает данные, выполните группировку ввид.Я могу изменить это только по нескольким причинам, большинство из которых будут инициированы заказчиком.

1 голос
/ 16 марта 2010

Вы можете сделать это, как вам угодно, честно говоря (одна из вещей, которые мне нравятся в MVC, вообще не навязывать вам свои дизайнерские решения), но многие люди находят этот вид преобразования лучше всего сделать в Контроллере, или более конкретно путем преобразования модели в модель представления.

По сути, идея заключается в том, что если контроллер является своего рода посредником, который переводит пользовательский ввод в действия модели и возвращает данные модели в представление удобным для использования способом, то вы бы также сделали какое-то отображение, которое обрабатывает перевод данные из необработанной модели в нечто, распознаваемое представлением.

Итак, что я видел в этом случае, так это то, что какая-то логическая модель будет создана в той же сборке, что и контроллеры, что-то (в вашем случае), например:

public class RestarauntViewModel : IDictionary<string, IEnumerable<Restaraunt>>
{
     public RestarauntViewModel(IEnumerable<Restaraunt>)
     {
           // your transform code that you had in the view
     }
}

Это сохраняет вид относительно чистым и позволяет при необходимости изменять логику того, что выбрано в каждой группе и т. Д., Не касаясь любых видов, которые могут его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...