我有一个强类型为Item类的View。在我的控制器中,我需要发送两个不同的List。除了创建一个包含两个List的新类之外,还有更简单的方法吗?
我最终要做的是在我的主页上按日期订购10件商品,并按人气订购10件商品。
我的内容
我实际上是将这两个答案结合起来。我强烈地将我的View输入到我用两个列表创建的新类中。然后,我强烈地为每个列表键入两个部分视图。可能看起来有点矫枉过正,但我喜欢它的结果。
答案 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中,我为每个视图制作了一个模型,即使它们只传递了由数据或业务层提供的相同数据,只是为了保持两个部分之间的分离非常严格。这个设置是一个更多的工作,在许多简单的情况下不需要,但它确实在我看来保持清洁。