我有一个可以渲染3种不同视图的控制器。但是我也为每个视图都有一个共同的部分(div)。我认为我可以使用自己的控制器创建一个UserControl并在我的视图中包含该控件(新控制器和视图作为控件)。
我应该如何使用UserControl?它应该是局部视图吗? 或者不同的方法 - 我可以在一个页面上有多个部分视图吗?
我一直在网上搜索最后一天的观看日期,并且找不到适合我的工作解决方案。另外,我想使用强类型视图/数据。
干杯
答案 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
注意:您也可以覆盖控件
拥有以下文件:
/Views/Products/MyCommonControl.ascx
.RenderPartial("MyCommonControl")
当您使用来自ProductsController
#2的{{1}}时,以及来自任何其他控制器,使用#1。因此,如果您愿意,可以覆盖某些控制器的功能。