【问题标题】:Response.Redirect in Page_LoadPage_Load 中的 Response.Redirect
【发布时间】:2013-12-14 04:16:57
【问题描述】:

我的Page_Load 中有一个Response.Redirect

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ...Code
    Response.Redirect("http://www.mysite.com")
End Sub

在添加 Response.Redirect 之前,我还有其他带有工作代码的子例程

当添加Response.Redirect 时,它们都不会处理自己的代码并自动执行Response.Redirect 网站。

我的代码在没有Response.Redirect 时有效。

【问题讨论】:

  • 你要执行什么代码? Response.Redirect 将告诉浏览器请求给定的页面/站点。如果您没有将其存储在某处,那么下一页将不知道您在内存中做了什么。
  • 一种方法在服务器中编译然后响应客户端。然后页面加载中的代码编译完成然后重定向到其他页面。
  • 是什么让你认为“当添加了 Response.Redirect 时,他们都不会处理他们的代码”?

标签: asp.net response.redirect


【解决方案1】:

使用

Response.Redirect("http://www.mysite.com",  false)

第二个参数表示当前页面的执行是否应该终止。

如果你使用Response.Redirect("http://www.mysite.com"),当前页面执行将终止

【讨论】:

    【解决方案2】:

    请使用

    Response.Redirect("http://example.com",  false)
    

    根据PRB: ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer

    如果您使用 Response.End、Response.Redirect 或 Server.Transfer 方法,发生 ThreadAbortException 异常。你可以使用一个 try-catch 语句来捕获这个异常。

    Response.End 方法结束页面执行并将 执行到应用程序中的 Application_EndRequest 事件 事件管道。 Response.End 后面的代码行不是 执行。

    此问题发生在 Response.RedirectServer.Transfer 方法,因为这两种方法都在内部调用 Response.End。

    要解决此问题,请使用以下方法之一:

    对于 Response.End,调用 HttpContext.Current.ApplicationInstance.CompleteRequest 方法而不是 Response.End 来绕过代码执行到 Application_EndRequest 事件。

    对于 Response.Redirect,使用重载 Response.Redirect(String url, bool endResponse) 为 endResponse 传递 false 参数来抑制对 Response.End 的内部调用。例如: Response.Redirect("nextpage.aspx", false); 如果您使用此解决方法,将执行 Response.Redirect 之后的代码。对于 Server.Transfer,使用 而是使用 Server.Execute 方法。

    【讨论】:

    • 您的答案与 Damith 的答案有何不同?
    • 是的,只是不要重复同样的事情。在回答之前检查是否有人已经发布过。如果我是你,我会删除我的答案并支持另一个答案。
    猜你喜欢
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多