Asp.Net MVC - 具有两个相同类型列表的强类型视图

时间:2009-08-14 02:09:36

标签: asp.net-mvc strongly-typed-view

我有一个强类型为Item类的View。在我的控制器中,我需要发送两个不同的List。除了创建一个包含两个List的新类之外,还有更简单的方法吗?

我最终要做的是在我的主页上按日期订购10件商品,并按人气订购10件商品。

我的内容

我实际上是将这两个答案结合起来。我强烈地将我的View输入到我用两个列表创建的新类中。然后,我强烈地为每个列表键入两个部分视图。可能看起来有点矫枉过正,但我​​喜欢它的结果。

4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:4)

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

第二种方法是将列表视为“辅助”数据,并将它们放在ViewData中,如jeef3所述。但是,在渲染列表时,使用强类型部分。

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

我的意思是在你的主视图中,你调用RenderPartial(...)但是传入你使用的视图数据键。

  

你的部分看起来像:

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

这使您可以从部分内部对该视图数据进行强类型访问。

答案 2 :(得分:3)

这是约翰建议或没有强类型视图并将它们添加到ViewData:

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

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

答案 3 :(得分:1)

您应该创建一个包含两个专门用于视图的列表的模型。

通常在我做过的小MVC中,我为每个视图制作了一个模型,即使它们只传递了由数据或业务层提供的相同数据,只是为了保持两个部分之间的分离非常严格。这个设置是一个更多的工作,在许多简单的情况下不需要,但它确实在我看来保持清洁。