繁体   English   中英

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

[英]ASP.NET 3.5 Page Load - Design Issue

我有一个包含一系列母版页的网站,这些母版页都来自“基础”母版页。 对于此示例,我们将其称为MasterPage.master。

编辑 -----

基本上有两半的网站:公共和私人。 除其他事项外,我们还要创建自定义网站跟踪“实用程序”。 每当页面被点击时......我们会捕获大量有关用户的数据以供将来报告等。

现在我正在公共网站上工作..但是我希望在3-4个月后将这个“实用程序”重新用于私人网站。

对我来说,Master Page似乎不是实现这一目标的最佳方式......虽然我还不熟悉.NET,但我觉得Master Pages只能用于组织UI。

我已经研究过Custom IHttpModule了,并且已经能够得到一些工作......但是如果你问我,它有点贫民窟。

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
            }


    }

结束编辑 ----

是否有更好的方法在每次加载页面时运行代码块而不是以下...例如自定义IHttpModule或以某种方式在Global.asax中。

[MasterPage.master] ......

protected void Page_Load(object sender, EventArgs e)
    {


        //...do stuff...

    }

谢谢

推荐的方法是使用OnLoad “事件”。

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

OnLoad与Page_Load vs. Load事件的一些背景信息

如果代码块总是相同的话,我会建议

  • 为您的所有页面创建基类
  • 在该页面的OnLoad中编写代码
  • 使所有页面都继承自此基类

这是一个代码示例:

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

您的所有页面都将继承自:

public class DisplayOrder : PageBase 
{
    // do stuff
}

希望能帮助到你。

当然我们需要更多信息,除了页面加载事件的方法签名之外,你没有发布任何内容。 这是在您加载页面或单击事件或刷新页面时触发的事件。 您可以做的唯一其他事情是在global.asax文件中添加代码。

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

不 - 这真是你最好的选择。 如果将它放在基类中,只要不覆盖它,它就会为所有子类运行。

请注意,您可以拥有多个Page_Load处理程序,因此如果您不想从重写方法中调用基本方法,您可以随时添加第二个处理程序,尽管这是一种迟钝的设计。 你准备做什么?

在很多情况下,每次页面加载时都会运行一些东西并且完全可以接受。 这就是Load事件的用途。 它将完全依赖于您在特定情况下尝试做的事情。 有关ASP.Net页面生命周期的概述,请参阅此页面 ,以确保您所执行的操作遵循您正在执行的事件的基本原则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM