当我尝试通过Response.Redirect(URL)
重定向到另一个网页时出现以下错误: - System.Web.HttpException: Cannot redirect after HTTP headers have been sent.
我写了一个Response.Write("Sometext")
;和Response.Flush()
之前调用重定向方法。
在这种情况下,我们如何使用Response.Redirect(URL)
?
我正在通过Asynch调用执行存储过程。 SP将花费近3分钟来执行。到那时我将从服务器获得负载均衡器超时错误,因为此应用程序在云计算机中运行。为了避免负载均衡器超时,我正在向浏览器(response.write()
和Flush()
)写一些文本。
答案 0 :(得分:3)
在尝试发送HTTP标头之前,您需要确保不要写/刷新任何。 发送标题后, 没有正确的方法 进行重定向,因为您可以做的唯一事情就是输出JavaScript来执行重定向(错误)或发送'元刷新/ location'标签很可能不在正确的位置(在HEAD内),从而导致无效的html。
答案 1 :(得分:2)
我有同样的错误和相同的方法。您可能想尝试使用javascript而不是直接调用Response.Redirect。
Response.Write("<script type='text/javascript'>");
Response.Write("window.location = '" + url + "'</script>");
Response.Flush();
我工作得很好但是我还需要在不同的浏览器上查看它。
答案 2 :(得分:1)
if (!Response.IsRequestBeingRedirected)
Response.Redirect("~/RMSPlusErrorPage.aspx?ErrorID=" + 100, false);
答案 3 :(得分:0)
你不能使用Response.Redirect,因为你已经过去了标题并写出了“Sometext”。在开始向客户端写入数据或进行META重定向之前,您必须检查(重定向条件)。
如果您希望其中一个页面显示文本并在5秒后重定向,则META是您的选择。
答案 4 :(得分:0)
如果您在页面呈现开始之前重定向(例如,当您从页面的Load
或PreRender
事件重定向时),则不会出现此错误。
我现在在您的评论中看到,您希望在长时间运行的存储过程完成后重定向。在这种情况下,您可能必须使用不同的方法。
例如,您可以在页面上放置一个带有UpdatePanel
的AJAX Timer
,并且Timer可以每隔几秒检查一次存储过程是否已完成,然后执行重定向。
此方法还有一个优点,即您可以在页面上放置一些“进行中”消息,同时程序正在运行,因此您的用户会知道事情仍在发生。
答案 5 :(得分:0)
尝试执行以下操作:
catch (System.Threading.ThreadAbortException)
{
// To Handle HTTP Exception "Cannot redirect after HTTP headers have been sent".
}
catch (Exception e)
{//Here you can put your context.response.redirect("page.aspx");}
答案 6 :(得分:0)
在我的情况下,问题的原因是在滚动网格视图中加载数据需要很长时间。并且在gridview数据未完全加载之前,我按下重定向按钮。我收到了这个错误。
您可以减少数据获取
或
在加载完成之前阻止按下重定向按钮