2011-04-13 179 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數據之前,但我按下重定向按鈕。

試圖解決問題可能是:

+減少您的數據得到

+裝載之前完成防止按重定向按鈕

的[爲什麼我得到