这是在ASP.net MVC中实现数据分组的最佳位置

时间:2010-03-15 17:42:23

标签: asp.net-mvc

我正在尝试对数据集合进行分组并将其发送到需要进行另一级别分组的View中我尝试在模型级别执行此操作但是通过分组集合进行循环变得非常困难并确定要传递给数据类型的数据类型偏不容易

在View级别进行分组看起来很容易实现,但我想避免这样做有没有办法呢?

代码:该模型是餐馆的集合,应首先按类别分组,然后按名称分组以获得不同的地址

 <% 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 个答案:

答案 0 :(得分:2)

  

在View级别进行分组看起来很简单   实施,但我想避免这种情况   有没有办法做到这一点?

为什么这是一个问题呢?模型层不应具有视图的实现细节。它应该只是拥有视图用来向用户显示信息的数据。没有理由为什么另一个视图不能使用相同的模型以不同的方式显示数据。如果您想在视图以外的地方进行数据格式化,则需要添加另一个图层,例如视图模型概念的拍摄。

由于视图正在显示数据,因此请在视图中进行分组。我可以改变的原因只有几个,其中大部分都是客户发起的。

答案 1 :(得分:1)

你可以随心所欲地做到这一点,坦率地说(我喜欢MVC的一个方面,一般不会强迫你做出设计决定),但很多人发现这种转换最好在Controller中完成,或者更具体地说,将模型转换为视图模型。

基本上这个想法是,如果Controller是一种中间人,它将用户输入转换为模型动作并以可用的方式将模型数据返回到视图,那么你也可以在那里进行某种处理翻译的映射从原始模型到视图识别的内容的数据。

所以我在你正在做的事情中所看到的是,某些逻辑模型将在与控制器相同的程序集中进行,某些东西(在你的情况下)就像:

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

这使视图保持相对干净,并允许您根据需要更改每个组中所选内容的逻辑,而不会触及可能使用它的任何视图。