gpt4 book ai didi

c# - Response.Redirect(URL, false) - 重定向后事件管理

转载 作者:太空狗 更新时间:2023-10-29 21:34:44 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Response.Redirect causes System.Threading.ThreadAbortException

ASP/C#.NET(网络表单,非 MVC)

更新:刚刚找到了一篇相关的帖子(可能是重复的):Why Response.Redirect causes 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() 中检查和重定向过期 session 时,这对我来说主要是个问题。每次我重定向时都必须设置一个“_Redirected”标志,然后在每个事件的顶部检查该标志,这似乎非常乏味。过去我不必担心这个,因为我总是为第二个参数传递 TRUE,不知道更好。

下面是一些代码,显示了我不想做的事情(在处理每个事件之前检查 _Redirected)。也许我正在寻找的是更好的 session 过期处理模式。

如有任何关于如何改进此处理的建议,我们将不胜感激。

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, EventArgs e)
{
if (!_Redirected)
{
// do Button2_Click() stuff...

Response.Redirect("Button2Page.aspx", false);
Context.ApplicationInstance.CompleteRequest();

_Redirected = true;
}
}

~~~

[01/24/2013] 回应https://stackoverflow.com/users/2424/chris-lively (谢谢,顺便说一句),这是我认为与您测试的代码相似的简化代码。在 Response.Redirect(url, false) 和 Page_Load() 中的 .CompleteRequest() 之后,我仍然看到 Button1_Click() 在回发时执行。

protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack)
{
Response.Redirect("Redirect.aspx", false);
Context.ApplicationInstance.CompleteRequest();
}
}

protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("Button1 clicked!");
}

此响应证实了此行为 https://stackoverflow.com/a/12957854/1530187到我在更新中上面提到的类似帖子。

知道我做错了什么会导致页面在重定向后继续执行吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com