コードを実行すると、response.write の前のスレッド プロセス !! それらを順番に作成する理由と方法は?
insertUser.ExecuteNonQuery()
con.Close()
Response.Write("Done successfully ...")
Thread.Sleep(4000)
Response.Redirect("Default.aspx")
応答は、Webアプリケーションでは1回限りのものです。「少し応答して、何か他のことをして、もう少し応答する」ことはできません。これは、応答のヘッダーResponse.Redirect()
を変更するようなものを検討する場合に特に当てはまります。(基本的に、応答に追加したコンテンツを完全に「クローバー」して、ユーザーに表示されないようにします。)Response.Redirect()
ここでやろうとしていることは次のようになります。
これを実現するための標準的な方法がいくつかあります。クライアント側のコードでステップ2と3を実行するステップ1を含むページで応答するか、サーバー側のコードでステップ3を実行し、2番目のページでステップ1を実行する(場合によっては2つ、数秒後のメッセージ)。
たとえば、ページAにメッセージを表示し、数秒待ってからユーザーをページBに送信するとします。次に、ページAに次のようなメッセージを含めることができます。
<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を使用)がユーザーに表示され、ユーザーがダイアログを閉じるとリダイレクトが実行されます。
Web Responseは、webrequestが完全に処理された後にのみページに表示されます。つまり、コードの実行後に応答を確認できます。したがって、コードは正しい順序で実行されます。以下に示すように、Response.End()メソッドを挿入してテストできます。
insertUser.ExecuteNonQuery()
con.Close()
Response.Write("Done successfully ...")
Response.End();
Thread.Sleep(4000)
Response.Redirect("Default.aspx")
コードでクライアント側の機能を使用してそれを行うことができます。次のリンクを参照してください。