2012-12-19 57 views
2

當我運行代碼時,線程過程在response.write之前!!爲什麼以及如何讓他們按順序?爲什麼線程在response.write之前出現

insertUser.ExecuteNonQuery() 
con.Close() 
Response.Write("Done successfully ...") 
Thread.Sleep(4000) 
Response.Redirect("Default.aspx") 
+0

頁面完全執行後會有響應。和asp.net網站作爲無狀態協議工作 –

+1

你究竟想在這裏完成什麼?這不會寫入頁面,等待4秒鐘,然後重定向。 HTTP響應不起作用。如果您試圖向用戶顯示消息和新頁面,則應該在客戶端代碼中執行等待/重定向或在第二頁上顯示消息。 – David

+0

您對客戶端/服務器如何在架構上進行交互有一些深刻的誤解。在將任何內容發送回客戶端瀏覽器之前,您的代碼正在IIS服務器上執行。 – asawyer

回答

0

Web響應將得到在頁面上,即你可以請在代碼完成後查看響應。因此您的代碼正在排除正確的順序。您可以通過插入Response.End()方法來進行測試,如下所示:

insertUser.ExecuteNonQuery() 
con.Close() 
Response.Write("Done successfully ...") 
Response.End(); 
Thread.Sleep(4000) 
Response.Redirect("Default.aspx") 
1

響應是Web應用程序中的一次性事物。你不能「迴應一點,做一些其他的事情,然後迴應一些。」當您考慮類似Response.Redirect()這些修改響應的標頭時尤其如此。 (。從本質上講,Response.Redirect()將完全「揍」你已經添加到響應,使用戶將再也看不到它的任何內容)

它看起來像你想在這裏做的是:

  1. 向用戶顯示消息。
  2. 等待幾秒鐘。
  3. 將用戶發送到其他頁面。

有幾個標準的方法來實現這一點。您可以使用包含步驟1的頁面進行響應,在客戶端代碼中執行步驟2和3,或者可以在服務器端代碼中執行步驟3,在第二頁執行步驟1(可能還有兩個隱藏幾秒鐘後的消息)。

例如,假設你想顯示在網頁A的消息,等待幾秒鐘,然後發送用戶頁面B.然後在第一個,你可能包括這樣的事情:

<script type="text/javascript"> 
    $(function() { 
     $('#dialog-message').dialog({ 
      modal: true, 
      buttons: { 
       Ok: function() { 
        $(this).dialog('close'); 
       } 
      }, 
      close: function() { 
       window.location.href='Default.aspx'; 
      } 
     }); 
    }); 
</script> 
<div id="dialog-message">Done successfully ...</div> 

使用jQuery,它所做的就是向用戶顯示一個對話框(使用jQuery UI Dialog)和預期的消息,當用戶關閉對話框時,它會執行重定向。

相關問題