【发布时间】:2009-05-22 08:58:58
【问题描述】:
如果我想为所有页面添加通用功能,我会创建一个 BasePage 并从中驱动所有 ASPX 页面,你如何对 MVC 中的 Pageviews 和 Controllers 做到这一点?
【问题讨论】:
标签: asp.net-mvc
如果我想为所有页面添加通用功能,我会创建一个 BasePage 并从中驱动所有 ASPX 页面,你如何对 MVC 中的 Pageviews 和 Controllers 做到这一点?
【问题讨论】:
标签: asp.net-mvc
对于视图(您称它们为“页面浏览量”),您可能没有太多的数据/行为可以在基类中分组,但您仍然可以。您将定义一个继承自 System.Web.UI.Page 的类,并将所有常见的逻辑放在那里。 然后在视图的代码隐藏文件中(在 ASP.NET MVC 1.0 中,视图没有默认文件隐藏代码,但 you can create it)从这个公共类继承视图类。
对于控制器,您可以从 System.Web.Mvc.Controller 创建一个类,并将所有常见的东西放入其中。然后从这个类派生所有控制器类。对命名、命名空间和文件位置没有限制。
【讨论】:
对于控制器,您只需从 System.Web.Mvc.Controller 继承并添加自定义功能:
public class MyController : System.Web.Mvc.Controller
{
public MyController() : base()
{
ViewData["someDataInMasterPage"] = "Hello World!";
}
}
如果您有一个母版页,它会尝试使用上面的键检索一些 ViewData,如果它们的控制器将从 MyController 继承,它将使其在您的所有视图中都可以访问。
您也可以从 ViewPage 继承来定义自定义功能。例如,请参阅这个 SO 问题:Extending WebFormView in MVC
【讨论】:
如果您希望所有视图共享同一个脚本,请使用包含所有脚本功能的母版页并在其中放置一个占位符:
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
然后每个子视图都会引用母版页。
<%@ Page Title="" Language="C#" MasterPageFile="Site.Master"
Inherits="OpenProjects.Web.Mvc.ApplicationView %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
</asp:Content>
对于控制器,创建您自己的应用程序控制器,该控制器继承自已构建的 MVC 控制器,然后让您的控制器继承自该控制器,而不仅仅是控制器
【讨论】: