asp.net mvc 2多个局部视图

时间:2010-05-07 19:07:41

标签: c# asp.net asp.net-mvc asp.net-mvc-2

我有一个可以渲染3种不同视图的控制器。但是我也为每个视图都有一个共同的部分(div)。我认为我可以使用自己的控制器创建一个UserControl并在我的视图中包含该控件(新控制器和视图作为控件)。

我应该如何使用UserControl?它应该是局部视图吗? 或者不同的方法 - 我可以在一个页面上有多个部分视图吗?

我一直在网上搜索最后一天的观看日期,并且找不到适合我的工作解决方案。另外,我想使用强类型视图/数据。

干杯

1 个答案:

答案 0 :(得分:2)

您应该使用局部视图。然后在3-4个视图中调用<% Html.PartialRender("MyCommonControl", Model); %>来渲染公共部分(如菜单或其他内容)。

通过这种方式,您可以强烈键入局部视图并将模型(如上例所示)或模型的一部分传递给相关的。

UserControls实际上是ASP.NET Forms范例,您应该使用部分视图,因为它们使用相同的MVC视图引擎。

<强>更新

如果您将PartialView放在/Views/Home中,则HomeController只能访问/Views/Common您希望将其放入class CommonSectionViewModel { public string Data { get; set; } // Just Example Data public int Count { get; set; } } class ProductsModel { public CommonSectionViewModel CommonData { get; set; } // Other properties for a products models } class CompaniesModel { public CommonSectionViewModel CommonData { get; set; } // Other properties for a company model } 以便所有控制器都可以访问它。

您还应该为控制需要的数据创建一个通用ViewModel,并使其成为每个Controller的模型的子组件:

例如:

<% Html.PartialView("MyCommonControl", Model.CommonData); %>

然后在你的控制器的视图中,你可以像这样调用部分渲染:

/Views/Common/MyCommonControl.ascx

注意:您也可以覆盖控件

拥有以下文件:

  1. /Views/Products/MyCommonControl.ascx
  2. .RenderPartial("MyCommonControl")
  3. 当您使用来自ProductsController#2的{{1}}时,以及来自任何其他控制器,使用#1。因此,如果您愿意,可以覆盖某些控制器的功能。