2009-08-14 114 views
5

的两个列表我有一个看法强类型,以项目类。在我的控制器中,我需要发送两个不同的列表。有没有更容易的方法来做到这一点,而不是创建一个具有两个List的新类。Asp.Net MVC - 强类型查看同类型

什么我最终要做的是对我的主页10个项目按日期排序,以及10项依热门程度排序。

我做了什么

其实我去与这两个答案的组合。我强烈地将我的视图键入到用两个列表创建的新类中。然后我强烈地将两个部分视图键入到每个列表中。可能看起来过度杀伤力,但我喜欢它的结果。

回答

10

“创建具有两个列表一个新的类”是要走的路。它被称为视图模型,一旦你拥抱它,强类型视图的力量就真正打开了。它可以是这个简单:

public class IndexViewModel 
{ 
    public List<Item> Newest { get; set; } 
    public List<Item> Popular { get; set; } 
} 
3

这就是约翰建议,或不含强类型的视图,并将它们添加到的ViewData:

ViewData["Newest"] = Newest; 
ViewData["Popular"] = Popular 

另一种选择是强类型的局部视图。

1

您应该既包括列出专门用于视图的模式。

通常在我已经完成的小MVC中,我为每个视图都创建了一个模型,即使它们只传递了数据或业务层提供的相同数据,以保持两个部分之间的分隔非常严格。这种设置稍微有点多,在很多简单的情况下都不需要,但它确实使我的观点更清晰。

4

一般有两种哲学这一点。首先是采取John Sheehan的方法。您可以使用这两个列表创建自定义视图模型,并将其传递给您的强类型视图。

二是要考虑名单“辅助”数据,并把他们的ViewData像jeef3说。但是,当您呈现列表时,您使用强类型部分。由于我的意思是在你的主视图中,你可以调用RenderPartial(...),但是传递你使用的视图数据键。

而且你的部分看起来像:

<%@ ViewUserControl Inherits="System.Web.Mvc.ViewUserControl<List<Item>>" %> 
... 

这给你强类型从内您的部分访问该视图的数据。