2010-02-10 35 views
2

做一個Response.Redirect第一次回發到實際重定向之前調用重定向的頁面?我不這麼認爲,但我的調試告訴我它是這樣的。Response.Redirect - 在重定向之前回復自我?

我可以看到它這樣做,並導致我一個問題。問題是這樣的:

  1. 我的頁面上有一個asp.net按鈕。
  2. 當按鈕被點擊時,頁面當然會回傳。再下面是調用該按鈕的事件處理方法:

    Response.Redirect("Checkout?frpp=1"), true); 
    
  3. 但我注意到,當重定向被調用時,它首先返回並擊中該頁面的頁面加載,這是在做網頁重定向。那麼這是我的問題,因爲它調用的代碼,我不希望它再次調用如下:

    if(!IsPostBackl) ShowOrderItems();

所以,就像我做了第二次回傳:當您單擊按鈕

  1. 第一回發發生,打事件處理程序,運行它調用Redirect我的處理方法。
  2. Redirect被稱爲,但它正在做另一個回發到這裏的同一頁...爲什麼?那可能嗎?
+0

你是如何使用它?例如,如果您通過按鈕單擊事件來使用它,則在重定向之前將發生回發。 – 2010-02-10 17:40:09

+0

我不是在說那個。我知道當你點擊按鈕時發生回發。我的問題是後回發生,它擊中我的處理程序方法,該處理程序方法正在做一個Response.Redirect到另一個頁面,但它似乎是擊中該頁面的page_load再次重新定向,並擊中新頁面的page_load。 – PositiveGuy 2010-02-10 17:46:52

+0

線程在重定向之前需要點擊「Response.Redirect」代碼。除非您使用超鏈接,否則重定向不能直接從客戶端發生。雖然點擊'Response.Redirect'語句後,線程將返回到同一頁面,然後從客戶端重定向。 – 2010-02-10 17:46:55

回答

3

Response.Redirect不會導致PostBack - 它發出HTTP 302 response,這會導致瀏覽器發出新的URL的請求。

Response.Redirect確實完成了當前函數和調用堆棧,雖然它不會自動中止當前線程。也許這就是你所看到的?

+0

我不確定這個答案是否正確。如果你瀏覽一個使用Response.Redirect的頁面,那麼你會看到在Response.Redirect之後沒有運行代碼。根據Microsoft(http://msdn.microsoft.com/en-us/library/a8wa7sdt%28v=vs.80%29.aspx),Response.Redirect自動調用Response.End,它會暫停當前頁面的執行。 – James 2011-04-05 09:15:15

2

這就是ASP.Net按鈕的工作方式。他們發回頁面。發生這種情況時,頁面加載事件首先運行(實際上,一些內部框架的東西,然後頁面初始化,然後頁面加載)。在此之後,您的按鈕點擊處理程序將運行。

在我看來,你已經回答了你自己的問題 - 「if (!IsPostBack)」是用來跳過後臺運行頁面加載代碼的東西。

相關問題