如何:ASP.NET MVC中的PageView和Controllers继承

时间:2009-05-22 08:58:59

标签: asp.net-mvc

如果我想为所有页面添加常用功能,我创建一个BasePage并从中驱动所有ASPX页面,那么如何在MVC中对Pageviews和Controllers进行操作?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

对于控制器,您可以创建一个从System.Web.Mvc.Controller中运行的类,并将所有常见内容放入其中。然后从此类派生所有控制器类。对namings,名称空间和文件位置没有限制。

答案 2 :(得分:1)

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

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