Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NETWeb表单动态基页或钩页加载事件(从外部)_C#_Asp.net - Fatal编程技术网

C# ASP.NETWeb表单动态基页或钩页加载事件(从外部)

C# ASP.NETWeb表单动态基页或钩页加载事件(从外部),c#,asp.net,C#,Asp.net,我有大量的aspx页面。我想从所有aspx页面加载事件触发一个公共函数,但为此,我需要在所有aspx页面的所有页面加载事件中添加函数调用。因此,我正在寻找一个简单的把戏,我可以从我的网站上的所有aspx页面的所有页面加载事件中调用函数 所以,是否可以从外部钩住页面加载事件,或者我们是否可以创建一个将动态附加所有aspx页面的基本页面 但我不是指像这样的基本页面 public partial class MyBase: System.Web.UI.Page { } public partial

我有大量的aspx页面。我想从所有aspx页面加载事件触发一个公共函数,但为此,我需要在所有aspx页面的所有页面加载事件中添加函数调用。因此,我正在寻找一个简单的把戏,我可以从我的网站上的所有aspx页面的所有页面加载事件中调用函数

所以,是否可以从外部钩住页面加载事件,或者我们是否可以创建一个将动态附加所有aspx页面的基本页面

但我不是指像这样的基本页面

public partial class MyBase: System.Web.UI.Page
{

}

public partial class index : MyBase
{

}
上面的方法我不想解决问题,因为如果我按照上面的方法,那么我必须编辑我网站中的所有aspx页面。我需要任何简单的技巧来钩住页面加载事件

请引导我

编辑 我正在检查cookie值…如果没有找到,请重定向到country.aspx。所以,当country.aspx加载时,代码再次尝试重定向到country.aspx…..无限循环开始。 指导我如何为这种情况编写代码。谢谢

听起来你需要一份工作

然后,您的代码应该如下所示

public class MyModule : IHttpModule 
{

    public void Init(HttpApplication application)
    {
        //hook your onload event here. There are other events that could be more suitable
        app.PreRequestHandlerExecute += OnBeforeExecute;
    }

    private void OnBeforeExecute(Object sender, EventArgs e)
    {
        var app = (HttpApplication) sender;
        HttpContext context = app.Context;
        //insert your code here
    }

    public void Dispose()
    {

    }
}
不要忘记查看上面链接中的模块注册部分

注意:asp.net管道中还有许多事件被触发,请查看这些事件的列表。也许有一个更合适的活动取决于你需要做什么

编辑

既然你发布了代码,你可以做一些事情来改进它

  • 在这种情况下,不要使用重定向永久。简单的302重定向就可以了。浏览器倾向于缓存永久重定向,因为你知道,它们是永久的,不需要再次检查。因此,您将得到两个无限循环:a)浏览器缓存了301并始终将您重定向到国家选票屏幕,b)您的代码始终重定向到选票屏幕

  • 您应该插入一些逻辑来检查页面是否是选票屏幕,如果是,请避免重定向。也许是这样的:

    HttpContext context = app.Context;
    if(context.Request.RawUrl.IndexOf("country.aspx",StringComparison.InvariantCultureIgnoreCase) > -1)
    {
        return;
    }
    //rest of your code here
    

  • 旁白:你应该能够自己解决这个问题。我看了一下你的个人资料页面,你问了将近一千个问题,我列举的这些问题应该很容易让你自己去研究和解决。有些事情告诉我你把所有的程序都委托给了这么多人。您从我这里得到了-1。

    您考虑过HTTPM模块吗?您的问题不够详细,无法知道页面是否需要了解函数。OnBeforeExecute何时启动?它会在任何aspx页面加载之前触发吗?plzz指南。thanks@Thomas:如果您访问此页面并向中间滚动,您可以在表中看到请求生存期内激发的事件列表。上面的OnBeforeExecute连接到PreRequestHandlerExecute,所以它将在页面的PageLoad事件之前触发。MSDN声明:您的解决方案不好。OnBeforeExecute()正在再次调用&再次调用并启动一个无限循环。每个请求都会触发一次事件,但少数可能会触发的事件除外。然而,无限循环的事情不应该发生,当然,除非代码中的某个地方有无限循环。您应该检查访问日志(iis日志),以查看应用程序中的请求是否有可疑之处。您可能还希望将模块的代码粘贴到此处以查看。
    HttpContext context = app.Context;
    if(context.Request.RawUrl.IndexOf("country.aspx",StringComparison.InvariantCultureIgnoreCase) > -1)
    {
        return;
    }
    //rest of your code here