完成我的 asp 项目后,我提出了一个新要求。为此,我必须在所有页面加载事件中执行一些代码。我可以获得所有这些页面加载的事件吗?我不能使用 Global.asax 的 Session_start,因为它将包含带有会话状态的 WebHandler。有任何想法吗?
问问题
127 次
3 回答
2
您保留一个基本页面并从所有 aspx 页面继承它。通过这种方式,您可以保持逻辑集中。
例子
页面
public partial class MyAspxPage : BasePage
{
}
基本页面
public class BasePage : Page
{
protected override void OnLoad(EventArgs e)
{
}
}
您还应该将 AutoEventWireup 设置为 false。
于 2013-04-22T11:34:43.137 回答
1
会话开始不合适,因为它只会在用户获得新会话时触发,而不是每次加载页面时触发。
有几个选项,包括使用所有页面都继承自的基本页面。这意味着您需要记住将其连接到所有页面。
我的建议是编写一个 http 模块,该模块会为所有 aspx 页面加载而触发。
您将需要创建一个实现 System.Web.IHttpModule 的模块。
using System;
using System.Web;
public class HelloWorldModule : IHttpModule
{
public HelloWorldModule()
{
}
public String ModuleName
{
get { return "HelloWorldModule"; }
}
// In the Init function, register for HttpApplication
// events by adding your handlers.
public void Init(HttpApplication application)
{
application.BeginRequest +=
(new EventHandler(this.Application_BeginRequest));
application.EndRequest +=
(new EventHandler(this.Application_EndRequest));
}
private void Application_BeginRequest(Object source,
EventArgs e)
{
// Create HttpApplication and HttpContext objects to access
// request and response properties.
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
string filePath = context.Request.FilePath;
string fileExtension =
VirtualPathUtility.GetExtension(filePath);
if (fileExtension.Equals(".aspx"))
{
context.Response.Write("<h1><font color=red>" +
"HelloWorldModule: Beginning of Request" +
"</font></h1><hr>");
}
}
public void Dispose() { }
}
然后按照此处的示例将其连接到 web.config 中。
<httpModules>
<add name="HelloWorldModule" type="HelloWorldModule" />
</httpModules>
您需要检查模块中的 context.Request.Path 属性以排除路径不符合您的条件的任何请求(即不以 aspx 结尾)。
更多信息在这里。 http://www.4guysfromrolla.com/demos/printPage.aspx?path=/articles/011404-1.aspx
于 2013-04-22T11:50:24.167 回答
0
我认为这里最好的解决方案是创建一个实现 PageLoad 的自定义基页面类,然后从中继承所有页面。
就像是:
public abstract class BasePage: Page
{
protected void Page_Load(object sender, EventArgs e) {
// your code
}
}
您可以在 web.config 中注册基页类:
<system.web>
<!-- ... -->
<pages pageBaseType="MyWeb.UI.BasePage" />
<!-- ... -->
</system.web>
于 2013-04-22T11:36:16.533 回答