Page_Load中的Response.Redirect

tel*_*tri 6 asp.net response.redirect

我有一个Response.Redirect在我的Page_Load:

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
Run Code Online (Sandbox Code Playgroud)

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

Response.Redirect加入他们都不会处理自己的代码,并自动执行该Response.Redirect网站.

当没有时,我的代码可以正常工作Response.Redirect.

Dam*_*ith 9

使用

Response.Redirect("http://www.mysite.com",  false)
Run Code Online (Sandbox Code Playgroud)

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

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


Vig*_*r A 6

请用

Response.Redirect("http://example.com",  false)
Run Code Online (Sandbox Code Playgroud)

根据PRB:如果您使用Response.End,Response.Redirect或Server.Transfer,则会发生ThreadAbortException:

如果使用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方法.