當我運行代碼時,線程過程在response.write之前!!爲什麼以及如何讓他們按順序?爲什麼線程在response.write之前出現
insertUser.ExecuteNonQuery()
con.Close()
Response.Write("Done successfully ...")
Thread.Sleep(4000)
Response.Redirect("Default.aspx")
當我運行代碼時,線程過程在response.write之前!!爲什麼以及如何讓他們按順序?爲什麼線程在response.write之前出現
insertUser.ExecuteNonQuery()
con.Close()
Response.Write("Done successfully ...")
Thread.Sleep(4000)
Response.Redirect("Default.aspx")
您可以使用客戶端功能在你的代碼 普萊舍做到這一點請參考以下鏈接後,才的WebRequest的完整處理
Web響應將得到在頁面上,即你可以請在代碼完成後查看響應。因此您的代碼正在排除正確的順序。您可以通過插入Response.End()方法來進行測試,如下所示:
insertUser.ExecuteNonQuery()
con.Close()
Response.Write("Done successfully ...")
Response.End();
Thread.Sleep(4000)
Response.Redirect("Default.aspx")
響應是Web應用程序中的一次性事物。你不能「迴應一點,做一些其他的事情,然後迴應一些。」當您考慮類似Response.Redirect()
這些修改響應的標頭時尤其如此。 (。從本質上講,Response.Redirect()
將完全「揍」你已經添加到響應,使用戶將再也看不到它的任何內容)
它看起來像你想在這裏做的是:
有幾個標準的方法來實現這一點。您可以使用包含步驟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)和預期的消息,當用戶關閉對話框時,它會執行重定向。
頁面完全執行後會有響應。和asp.net網站作爲無狀態協議工作 –
你究竟想在這裏完成什麼?這不會寫入頁面,等待4秒鐘,然後重定向。 HTTP響應不起作用。如果您試圖向用戶顯示消息和新頁面,則應該在客戶端代碼中執行等待/重定向或在第二頁上顯示消息。 – David
您對客戶端/服務器如何在架構上進行交互有一些深刻的誤解。在將任何內容發送回客戶端瀏覽器之前,您的代碼正在IIS服務器上執行。 – asawyer