【问题标题】:How To : PageView and Controllers inheritance in ASP.NET MVC操作方法:ASP.NET MVC 中的 PageView 和控制器继承
【发布时间】:2009-05-22 08:58:58
【问题描述】:

如果我想为所有页面添加通用功能,我会创建一个 BasePage 并从中驱动所有 ASPX 页面,你如何对 MVC 中的 Pageviews 和 Controllers 做到这一点?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    对于视图(您称它们为“页面浏览量”),您可能没有太多的数据/行为可以在基类中分组,但您仍然可以。您将定义一个继承自 System.Web.UI.Page 的类,并将所有常见的逻辑放在那里。 然后在视图的代码隐藏文件中(在 ASP.NET MVC 1.0 中,视图没有默认文件隐藏代码,但 you can create it)从这个公共类继承视图类。

    对于控制器,您可以从 System.Web.Mvc.Controller 创建一个类,并将所有常见的东西放入其中。然后从这个类派生所有控制器类。对命名、命名空间和文件位置没有限制。

    【讨论】:

      【解决方案2】:

      对于控制器,您只需从 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

      【讨论】:

        【解决方案3】:

        如果您希望所有视图共享同一个脚本,请使用包含所有脚本功能的母版页并在其中放置一个占位符:

        <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 控制器,然后让您的控制器继承自该控制器,而不仅仅是控制器

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-12-08
          • 2015-04-30
          • 2018-10-14
          • 1970-01-01
          • 1970-01-01
          • 2019-03-30
          • 1970-01-01
          相关资源
          最近更新 更多