是否可以阻止请求进入页面?

时间:2009-10-15 15:38:42

标签: asp.net ajax updatepanel page-lifecycle

这可能真的很骇客,但我开始变得绝望了

是否可以阻止请求实际访问实际页面...即,我可以在Application_BeginRequest中编写一些处理我想要的部分的内容,然后跳过生命周期的其余部分吗?

哦,是否有可能以ajax更新面板确实合适的方式执行此操作(返回一些默认内容,说“我没有做任何抱歉”)

好的,疯狂的问题。

3 个答案:

答案 0 :(得分:2)

您可以阻止代码的部分在部分页面更新期间执行,如下所示:

if (! ScriptManager.IsInAsyncPostBack) {
    // Code in here won't happen during UpdatePanel actions
}

UpdatePanels按设计执行大部分ASP.NET页面生命周期。如果您中止该过程(例如,通过Response.End()),请求将无法完成,因此客户端将无法获取更新页面HTML所需的数据。

在UpdatePanel中触发服务器端方法时,ASP.NET会执行以下操作:

  1. 通过运行正常的ASP.NET页面生命周期(好的,稍微删节,但关闭),从头开始重新构建面板中的页面部分。
  2. 将面板的HTML发送回客户端。
  3. 使用javascript DOM操作在客户端上重建面板。
  4. (有关详情,请参阅my recent answer to this question,有关详情,请参阅UpdatePanel Control Overviewthis article

    UpdatePanel AJAX实现有几种替代方案,不涉及整个页面生命周期。其中最受欢迎的是Using jQuery to directly call ASP.NET AJAX page methods

    使用jQuery进行AJAX调用让你更接近金属(可以这么说)而不是UpdatePanels,但是有很多很好的帮助让你开始 - 在StackOverflow本身和Encosia上(它的来源)最后一个链接)。

答案 1 :(得分:1)

考虑编写一个位于请求处理流程前面的HTTPModule来处理这个问题。

答案 2 :(得分:0)

当然,只需调用Response.End():

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if (Request.Url.AbsolutePath.Equals("/PageYouWantToSuppress.aspx", StringComparison.OrdinalIgnoreCase))
    {
        // Do your stuff

        Response.End();
    }
}

ETA:我不确定你问题的UpdatePanel部分。