可能重复:
Response.Redirect导致System.Threading.ThreadAbortException
ASP/C#.NET(Web表单,而不是MVC)
更新:刚发现一个相关的帖子(可能会重复这个帖子):为什么Response.Redirect导致System.Threading.ThreadAbortException?
~~~
经过一番研究后,我逐渐认识到,一般来说,在使用Response.Redirect()时,最好为第二个参数传递FALSE,以避免System.Threading.ThreadAbortException.(http://blogs.msdn.com/b/tmarq/archive/2009/06/25/correct-use-of-system-web-httpresponse-redirect.aspx)
我的问题是,"是否有一种推荐的方式(模式)用于管理(即跳过)重定向后触发的页面事件中的处理,当为第二个参数传递false时?"
当我在Page_Load()中检查并重定向过期的会话时,这对我来说主要是一个问题.每次重定向然后在每个事件的顶部检查该标志时,可能必须设置"_Rreirected"标志似乎非常繁琐.我过去不必担心这个问题因为我总是为第二个参数传递TRUE,不知道更好.
下面是一些代码,显示了我不想要做的事情(在处理每个事件之前检查_Redirected).也许我正在寻找的是更好的会话到期处理模式.
任何有关如何改进此处理的建议都将不胜感激.
private bool _Redirected = false;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["key"] == null)
{
Response.Redirect("SessionExpired.aspx", false);
Context.ApplicationInstance.CompleteRequest();
_Redirected = true;
}
}
protected void Page_PreRender(object sender, EventArgs e)
{
if (!_Redirected)
{
// do Page_PreRender() stuff...
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (!_Redirected)
{
// do Button1_Click() stuff...
Response.Redirect("Button1Page.aspx", false);
Context.ApplicationInstance.CompleteRequest();
_Redirected = true;
}
}
protected void Button2_Click(object sender, …Run Code Online (Sandbox Code Playgroud)