【问题标题】:Centralize functionality for each webpage集中每个网页的功能
【发布时间】:2012-11-04 01:40:24
【问题描述】:

我有一个 ASP.Net 4.0 Web 应用程序,其页面具有通用布局(顶部导航栏、左侧导航栏、徽标等)。 母版页非常适合布局部分,这就是我打算使用的。我不习惯使用 Masterpage,所以我的许多计划仍有待测试。 但是,我还希望我的页面具有一些应该在呈现页面的 HTML 之前执行的通用功能。此功能包括检查用户是否有权访问该页面。此外,通用功能因页面而异。有些页面甚至不需要它。 您会认为在 Masterpage 中包含此功能是显而易见的,并且该功能取决于请求的内容页面。 然而,它必须放在内容页面 page_load 触发之前,因为它的结果会影响页面的呈现。 知道我们需要来自内容页面的信息来对功能进行参数化,因此是否有放置此功能的最佳实践。 理想情况下,这将在 Masterpage 的 OnInit() 中,因为它首先运行。但我不相信我现在可以从内容页面中检索到必要的信息。

非常感谢 圣战

【问题讨论】:

  • 最好让所有页面都继承自一个通用基类,而不是使用 Masterpage(用于布局的内容)作为您的业务逻辑。

标签: asp.net master-pages


【解决方案1】:

您可以尝试编写自己的 HttpModule。

This discussion should help

【讨论】:

    【解决方案2】:

    MasterPage 不是此功能的合适位置。最好的地方是自定义基 Page 类,您的特殊功能位于派生 Page 中。这样您就可以继承您的自定义类并逐页调用您需要的功能。

    public class MyCustomPage : System.Web.UI.Page
    {
        public bool IsAuthorized(string someCriteria)
        {
            // run special check
        }
    }
    

    然后,当您在站点中创建单个页面时,您只需将其继承从 System.Web.UI.Page 切换到您自己的类。

    public class MyNewWebPage : MyNameSpace.MyCustomPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsAuthorized("myCriteria"))
                Response.Redirect("SomewhereElse.aspx");
        }
    }
    

    【讨论】:

      【解决方案3】:

      最好让所有页面都继承自一个公共基类,而不是使用 Masterpage(主要用于布局)进行业务逻辑。

      但是,如果您仍然希望它在 MasterPage 中执行,您可以使用这种方法,该方法使用所有页面实现的接口 INeedsAuthentication,需要进行身份验证:

      在 MasterPage 的Init:

      protected void Page_Init(Object sender, EventArgs e)
      {
          var page = HttpContext.Current.Handler as Page;
          if (page is INeedsAuthentication)
              checkAuthentication();
          else if (page is WebForm1)
              specialCondition();
          else
              commonCondition(); // for all pages, maybe do simply nothing here
      }
      

      【讨论】:

        猜你喜欢
        • 2015-08-08
        • 1970-01-01
        • 2014-07-07
        • 1970-01-01
        • 2017-01-20
        • 2017-12-14
        • 2011-09-20
        • 1970-01-01
        • 2019-08-01
        相关资源
        最近更新 更多