代码之家  ›  专栏  ›  技术社区  ›  Robert

ASP.NET 3.5页面加载-设计问题

  •  3
  • Robert  · 技术社区  · 15 年前

    我有一个网站,上面有一系列的母版页,都是从“基本”母版页派生而来的。对于这个例子,我们称它为masterpage.master。

    编辑 -----

    网站基本上分为两部分:公共和私人。我们要创建一个自定义的网站跟踪“实用程序”。每当网页被点击时…我们捕获了一系列关于用户的数据,以便将来进行报告等。

    现在我在公共场所工作。但我想在3-4个月后将这个“实用程序”重新用于私有站点。

    对我来说,母版页似乎不是实现这一目标的最佳方式…虽然我对.NET还是个新手,但我觉得母版页应该只用于组织用户界面。

    我已经研究过定制的ihtpmodule,并且能够让一些东西工作…但如果你问我,这有点像犹太人区。

    public void Init(HttpApplication context)
        {
    
            context.AcquireRequestState += (new EventHandler(this.context_AquireRequest));
        }
    ...
    void context_AquireRequest(object sender, EventArgs e)
        {
    
            HttpApplication application = (HttpApplication)sender;
            HttpContext context = application.Context;
    
                if (context.CurrentHandler is Page){
                    //Do Stuff
                }
    
    
        }
    

    结束编辑 ———

    有没有比下面更好的方法让一个代码块在每次加载一个页面时运行…例如自定义的ihtpmodule或global.asax中的某个模块。

    [母版页.master] ……

    protected void Page_Load(object sender, EventArgs e)
        {
    
    
            //...do stuff...
    
        }
    

    谢谢

    5 回复  |  直到 15 年前
        1
  •  1
  •   Manitra Andriamitondra    15 年前

    如果代码块始终相同,那么我建议

    • 为所有页面创建基类
    • 在该页面的onload中编写代码
    • 使所有页从此基类继承

    下面是一个代码示例:

    public abstract class PageBase : Page 
    {
        protected override void OnLoad(EventArgs e)
        {
          base.OnLoad(e);
          // do stuff
        }
    }
    

    您的所有页面都将从此继承:

    public class DisplayOrder : PageBase 
    {
        // do stuff
    }
    

    希望,这有帮助。

        2
  •  1
  •   Pent Ploompuu    15 年前

    建议的方法是使用 OnLoad “事件”。

    protected override void OnLoad(EventArgs e)
    {
      base.OnLoad(e);
      // do stuff
    }
    

    有关 OnLoad vs. Page_Load vs. Load event

        3
  •  0
  •   JonH    15 年前

    当然,我们需要更多的信息,除了页面加载事件的方法签名之外,您什么都没有发布。这是在加载页面、单击事件或刷新页面时触发的事件。你唯一能做的就是在global.asax文件中添加代码。

    http://msdn.microsoft.com/en-us/library/2027ewzw.aspx

        4
  •  0
  •   womp    15 年前

    不-那是你最好的选择。如果你把它放在基类中,只要你不重写它,它就可以为所有的子类运行。

    请注意,您可以有多个页面加载处理程序,因此,如果您不想费心从重写方法调用基方法,则可以始终添加第二个处理程序,尽管这是一种钝角的设计。你到底想做什么?

        5
  •  0
  •   Nathan Wheeler    15 年前

    在很多情况下,每次加载一个页面时都会运行一些东西,这是完全可以接受的。就是这样 Load 活动是为了。这完全取决于你在特定情况下要做什么。见 this page 有关ASP.NET页面生命周期的概述,以确保所做的操作遵循所做操作的事件的基本原则。

    推荐文章