2011-04-13 166 views
7

当我得到异常我得到的例外“不能HTTP标头后,重定向已发送”重定向到另一页

"Cannot redirect after HTTP headers have been sent." 

时做Response.Redirect("Home.aspx")

我该如何解决这个问题? 我尝试在重定向之前给Response.Flush()

+1

可能重复“不能当我调用Response.Redirect(url)时,发送HTTP头后重定向?](http://stackoverflow.com/questions/159523/why-do-i-get-cannot-redirect-after-http-headers-已经被发送的时候,我呼叫呼叫) – 2011-04-13 09:07:54

+0

如果答案中的o这个问题并没有帮助你(例如,第二高的投票人提到确保'Response.Buffer'在任何其他事情发生之前都被设置为true),那么如果您希望我们诊断它,您将不得不向我们展示更多代码。 – 2011-04-13 10:46:42

+1

重复问题和解决方法在这里找到:http://stackoverflow.com/questions/159523/why-do-i-get-cannot-redirect-after-http-headers-have-been-sent-when-i-call -resp – 2011-04-13 09:05:27

回答

8

问题是重定向之前的Response.Flush()。使用HTTP,您可以获得一个响应一个请求。您的浏览器请求的页面只有一次,我怀疑你试图两次回应:

Response.Flush(); //First Response 
Response.Redirect("Home.aspx"); //Second Response 

因此采取这一出Response.Flush()将解决你的问题。

+1

因为这个错误我添加了Response.Flush(),即使我删除了我也得到了同样的错误。 – nimi 2011-04-13 09:06:14

+0

然后你可能会得到另一个回应,做一个查找或张贴一些代码 – 2011-04-13 09:06:54

-2

我刚刚以一种不同的方式碰到了这个问题。我有两个Response.Redirect调用没有被包装在独立的代码分支中。在Chrome中工作良好,但IE不喜欢它。这是一个简单的解决方法,因为我有两个“if”语句。我只是把第二个为“否则,如果”是这样的...

if (QueryString("reset") == "1") 
{ 
    // User is resetting password 
    Response.Redirect("/Account/ResetPassword.aspx"); 
} 
else if (DataUtils.IsInt(QueryString("id"))) 
{ 
    // User is authenticating...completing signup 
    Response.Redirect("/Account/Activate.aspx"); 
} 
0

对我来说,这个问题的原因是,在滚动GridView控件加载数据花费很长的时间。并没有精确加载gridview数据之前,但我按下重定向按钮。

试图解决问题可能是:

+减少您的数据得到

+装载之前完成防止按重定向按钮

的[为什么我得到