【问题标题】:Is it possible to prevent a request from going to the page?是否可以阻止请求进入页面?
【发布时间】:2009-10-15 15:38:41
【问题描述】:

这可能真的很老套,但我开始绝望了

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

哦,是否有可能以 ajax 更新面板确实抛出一个合适的方式来做到这一点(返回一些默认内容,“我没有做任何对不起的事情”)

好的,疯狂的问题结束了。

【问题讨论】:

    标签: asp.net ajax updatepanel page-lifecycle


    【解决方案1】:

    当然,只需调用 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 部分。

    【讨论】:

    • 是的,这个我试过了 - 它似乎工作但没有返回更新面板所需的内容。任何人都知道更新面板需要什么才能开心吗?
    【解决方案2】:

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

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

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

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

    1. 通过运行正常的 ASP.NET 页面生命周期从头开始重建面板中的页面部分(好吧,稍微删节,但很接近)。
    2. 将面板的 HTML 发送回客户端。
    3. 使用 javascript DOM 操作在客户端上重建面板。

    (更多见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(最后一个链接的来源)。

    【讨论】:

      【解决方案3】:

      考虑在请求处理流的前端编写一个 HTTPModule 来处理这个问题。

      【讨论】:

      • 这可以工作 - 它如何阻止请求进一步通过 HTTPModule?
      • @IP - Response.CompleteRequest 将停止请求。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多