- - PR -
「実行中・・・」や「検索中・・・」を表示させるには
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-05-16 10:58
マシューさんのケースですが、このようなのはいかがでしょう?
iiz さんの件は、最終出力がPDFなので、これは通用しないですが。 <!-- BBCode Start --><TABLE BORDER="0" ALIGN="CENTER" WIDTH="90%" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="5%" NOWRAP><FONT SIZE="-1">コード:</FONT></TD><TD WIDTH="95%"><HR SIZE="1" WIDTH="100%"></TD></TR><TR><TD COLSPAN="2"><PRE> <html> <head> <script language="javascript"> <!-- function open_wait() { var x = (window.screen.width -400) /2; var y = (window.screen.height -300) /2; var w = window.open("","komado","toolbar=no,location=no,directories=no, width=400,height=300,left=" + x + ",top=" + y); w.document.write("<html><head><title>処理中</title></head><body>"); w.document.write("<p align=center>データ作成処理中...<br>"); w.document.write("</p></body></html>"); } function close_wait() { var w = window.open("","komado","width=100,height=100,left=0,top=0"); w.close(); } --> </script> </head> <body id="bodyID" runat="server"> <form runat=server> <asp:Button id="startCmd" Runat="server" Text="実行"></asp:Button> <asp:Label id="lblMes" runat="server"></asp:Label> </form> </body> </html> ------------------------------------------------------------------ private void Page_Load(object sender,EventArgs e) { if(!IsPostBack) { startCmd.Attributes.Add("OnClick","open_wait();"); } else { System.Web.UI.HtmlControls.HtmlGenericControl g=(HtmlGenericControl) this.FindControl("bodyID"); g.Attributes.Add("onload","close_wait();"); } } private void startCmd_OnClick(object sender,EventArgs e) { // すごく長い時間かかる処理 System.Threading.Thread.Sleep(9000); lblMes.Text = "処理が終了しました。"; } </PRE><HR SIZE="1" WIDTH="100%"></TD></TR></TABLE><!-- BBCode End --> * すみません。所々スペルミスがありました。ちゃんとチェックして送らないと だめですね。(反省) [ メッセージ編集済み 編集者: いのつち 編集日時 2003-05-23 10:31 ] | ||||
|
投稿日時: 2003-05-16 18:48
いのつちさん、ありがとうございました。
Attribute.Add();を使用して、待機画面をすぐに表示することが出来ました。 が 閉じる側がうまくいきません。 >System.Web.UI.HtmlControls.HtmlGenericControl >g=(HtmlGenericControl) this.FindControl("bodyID"); >g.Attributes.Add("onload","close_wait();"); 部について解説頂けませんか? よろしくお願いします。 | ||||
|
投稿日時: 2003-05-23 10:41
#諸事情でしばらくアクセスできず、遅くなってすみません。 #また、元ソースがタイプミスの連続でした。 PostBack時に、クライアント側でページが読み込まれたとき(Onload)に、close_wait()で ウィンドウを閉じるようにしています。 <body runat=server id="bodyID"> と、HTMLのbodyタグにrunat属性を設定しているところがミソで、コントロールを プログラムから制御できるようにしています。 一般的なHTMLタグを示すコントロールは、System.Web.UI.HtmlControls.HtmlGenericControl で表現できるので、 そこで <body onload="close_wait();"> と書き出すように細工をしています。 #もし、ボタンクリックでポストバックされるのではなく、別ページへ移ってしまう のであれば、飛び先で記述します。ウィンドウ名(この場合"komado")さえあっていれば 消えてくれます。 | ||||
|
投稿日時: 2003-05-23 18:09
>いのつちさん
まだうまくいかないのですが、理解できました。 細かな解説ありがとうございます。 自分のプログラムにあてはめてがんばってみます。 | ||||
|
投稿日時: 2004-01-13 16:16
いのつちさんのサンプルコードをVBで行おうとしております。
待機画面を表示するところまでは出来ましたが、閉じる側 System.Web.UI.HtmlControls.HtmlGenericControl g=(HtmlGenericControl) this.FindControl("bodyID"); g.Attributes.Add("onload","close_wait();"); のVBへの変換がわかりかりません。 ご教授よろしくお願いします。 | ||||
|
投稿日時: 2004-03-17 16:59
私もずっとこの課題で悩んでおりました。
Refreshを用いた方法はわかったのですが、値の渡し方に悩んでおります。 現在は、 検索入力画面→検索結果 で、postして値を渡しています。 待機画面を表示するために、 検索入力→待機画面→検索結果 としましたが、この「Refresh」によってどのように値を渡してよいかわからずにいます。 知識があまりないため、入力画面→待機画面でまずpostし、 待機画面で受け取った値をさらにpostして、検索結果へ送信してみました。 しかし、(当然?)値は渡せていません。 この「Refresh」を用いる場合、値はどのように渡したらよいのでしょうか? 因みに、検索入力画面からはHTMLボタンでhidden値を送信しています。 (postだからあたりまえ?) 以上、宜しくお願い致します。 | ||||
|
投稿日時: 2004-03-17 18:15
邪道かもしれませんが、こんな方法で実現したことがあります。
検索入力画面→待機画面→検索結果画面 検索入力画面では入力された条件値を待機画面へ渡し(submit)、 待機画面では検索結果画面を呼び出すためのFORMを定義しておいて onLoad時に、そのFORMをsubmitする方法です。 そのFORMの中にはINPUT TYPE="hidden"で検索条件値を受け渡す ようにします。 Refreshではなく、onLoad時にsubmitする部分が異なります。 参考になるでしょうか。 | ||||
|
投稿日時: 2004-03-18 09:47
ありがとうございます。
黒獅子さんの方法でやってみたのですが、 ViewStateは無効です。とエラーが出てしまいました。 方法は、待機画面でhidden項目で受信し(サーバ側)、 別のhidden項目に値を格納して(クライアントロード時JSにて)、 postしています。 一瞬待機画面が見えるので、submit時のエラーだと思います。 以前、同様のエラーで悩んだときはsubmitボタンとJavaScriptのsubmitの 二重のsubmitのせいでしたが、今回はどこがかぶっているのでしょうか? それとも違うエラーでしょうか? また、JavaScriptの関数をロード時に走らせようとしていますが、 関数を通る前でエラーがでているようです。 エラーは、「このページのViewStateは無効です。壊れている可能性があります。」 以外にはなにもありません。 宜しくお願い致します。 | ||||
