【发布时间】:2011-10-11 18:07:32
【问题描述】:
我希望 MVC3 提供给客户端页面的部分网页。而不是让它们在每个站点中都是静态的。我的网站在页面的某些部分有重复出现的标记,例如横幅、导航。在某些站点中,我需要稍微自定义标记。因此,如果可能的话,我需要能够扩展。
有人可以告诉我 MVC3 是否是解决此问题的理想选择吗?我在想片面的看法。你能继承和扩展部分视图吗?
谢谢
【问题讨论】:
标签: asp.net-mvc-3 inheritance partial-views
我希望 MVC3 提供给客户端页面的部分网页。而不是让它们在每个站点中都是静态的。我的网站在页面的某些部分有重复出现的标记,例如横幅、导航。在某些站点中,我需要稍微自定义标记。因此,如果可能的话,我需要能够扩展。
有人可以告诉我 MVC3 是否是解决此问题的理想选择吗?我在想片面的看法。你能继承和扩展部分视图吗?
谢谢
【问题讨论】:
标签: asp.net-mvc-3 inheritance partial-views
可以根据您的需要实施部分视图。例如,您可以按如下方式使用它们:
@model string[]
@if((bool)Model[0]) {
<span>I like it to be this way.</span>
} else {
<span>No, I like it to be that way.</span>
}
在一个视图中,你可以这样称呼这个局部视图:
@Html.Partial("myPartialView", new string[] { "true" })
您几乎可以将任何内容以Model 传递给部分视图。
如果您打算在多个应用程序上使用这些局部视图,我鼓励您为这些局部视图创建 Nuget 包,并通过 Nuget 包管理器将它们放入每个应用程序中。
【讨论】:
横幅、导航、自定义面板等 - 所有这些都是您可能希望随着时间的推移添加、组合、删除或更新的组件。是的,部分视图可以轻松完成这项工作,但在我看来,继承不是前进的方向。
您的局部视图应该基于视图模型。例如:OrderPanelViewModel、UserMenuViewModel、CustomPanelViewModel。每个局部视图现在都是一个组件,一个您可以根据需要添加、删除、修改的功能。
如果您想结合横幅和用户菜单会发生什么?如果他们从同一个视图模型继承,这将不起作用,但如果他们有自己的视图模型,它将起作用。
例如:
public class MyCustomPaneViewModel{
public UserMenuViewModel UserMenu { get; set; }
public UserBannerViewModel UserBanner { get; set; }
}
您现在可以将视图基于此视图模型
@model YourDll.WebUI.Models.MyCustomPaneViewModel
@section main_content{
@Html.DisplayFor(model => model.UserMenu, "UserMenu")
@Html.DisplayFor(model => model.UserBanner, "UserBanner")
}
【讨论】: