- PR -

「実行中・・・」や「検索中・・・」を表示させるには

投稿者投稿内容
いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 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 ]
マシュー
常連さん
会議室デビュー日: 2002/11/29
投稿数: 39
投稿日時: 2003-05-16 18:48
いのつちさん、ありがとうございました。
Attribute.Add();を使用して、待機画面をすぐに表示することが出来ました。

閉じる側がうまくいきません。
>System.Web.UI.HtmlControls.HtmlGenericControl
>g=(HtmlGenericControl) this.FindControl("bodyID");
>g.Attributes.Add("onload","close_wait();");
部について解説頂けませんか?
よろしくお願いします。


いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 2003-05-23 10:41
引用:

マシューさんの書き込み (2003-05-16 18:48) より:
閉じる側がうまくいきません。
>System.Web.UI.HtmlControls.HtmlGenericControl
>g=(HtmlGenericControl) this.FindControl("bodyID");
>g.Attributes.Add("onload","close_wait();");
部について解説頂けませんか?



#諸事情でしばらくアクセスできず、遅くなってすみません。
#また、元ソースがタイプミスの連続でした。

PostBack時に、クライアント側でページが読み込まれたとき(Onload)に、close_wait()で
ウィンドウを閉じるようにしています。

<body runat=server id="bodyID">
と、HTMLのbodyタグにrunat属性を設定しているところがミソで、コントロールを
プログラムから制御できるようにしています。
一般的なHTMLタグを示すコントロールは、System.Web.UI.HtmlControls.HtmlGenericControl で表現できるので、
そこで <body onload="close_wait();"> と書き出すように細工をしています。

#もし、ボタンクリックでポストバックされるのではなく、別ページへ移ってしまう
のであれば、飛び先で記述します。ウィンドウ名(この場合"komado")さえあっていれば
消えてくれます。
マシュー
常連さん
会議室デビュー日: 2002/11/29
投稿数: 39
投稿日時: 2003-05-23 18:09
>いのつちさん
まだうまくいかないのですが、理解できました。
細かな解説ありがとうございます。
自分のプログラムにあてはめてがんばってみます。
かっちゃん
会議室デビュー日: 2003/12/03
投稿数: 7
投稿日時: 2004-01-13 16:16
いのつちさんのサンプルコードをVBで行おうとしております。
待機画面を表示するところまでは出来ましたが、閉じる側
 System.Web.UI.HtmlControls.HtmlGenericControl
        g=(HtmlGenericControl) this.FindControl("bodyID");
 g.Attributes.Add("onload","close_wait();");
のVBへの変換がわかりかりません。
ご教授よろしくお願いします。
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-03-17 16:59
私もずっとこの課題で悩んでおりました。
Refreshを用いた方法はわかったのですが、値の渡し方に悩んでおります。
現在は、
検索入力画面→検索結果
で、postして値を渡しています。
待機画面を表示するために、
検索入力→待機画面→検索結果
としましたが、この「Refresh」によってどのように値を渡してよいかわからずにいます。
知識があまりないため、入力画面→待機画面でまずpostし、
待機画面で受け取った値をさらにpostして、検索結果へ送信してみました。
しかし、(当然?)値は渡せていません。

この「Refresh」を用いる場合、値はどのように渡したらよいのでしょうか?
因みに、検索入力画面からはHTMLボタンでhidden値を送信しています。
(postだからあたりまえ?)

以上、宜しくお願い致します。
黒獅子
会議室デビュー日: 2002/10/16
投稿数: 17
投稿日時: 2004-03-17 18:15
邪道かもしれませんが、こんな方法で実現したことがあります。

検索入力画面→待機画面→検索結果画面

検索入力画面では入力された条件値を待機画面へ渡し(submit)、
待機画面では検索結果画面を呼び出すためのFORMを定義しておいて
onLoad時に、そのFORMをsubmitする方法です。
そのFORMの中にはINPUT TYPE="hidden"で検索条件値を受け渡す
ようにします。

Refreshではなく、onLoad時にsubmitする部分が異なります。
参考になるでしょうか。
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-03-18 09:47
ありがとうございます。
黒獅子さんの方法でやってみたのですが、
ViewStateは無効です。とエラーが出てしまいました。
方法は、待機画面でhidden項目で受信し(サーバ側)、
別のhidden項目に値を格納して(クライアントロード時JSにて)、
postしています。
一瞬待機画面が見えるので、submit時のエラーだと思います。
以前、同様のエラーで悩んだときはsubmitボタンとJavaScriptのsubmitの
二重のsubmitのせいでしたが、今回はどこがかぶっているのでしょうか?
それとも違うエラーでしょうか?
また、JavaScriptの関数をロード時に走らせようとしていますが、
関数を通る前でエラーがでているようです。

エラーは、「このページのViewStateは無効です。壊れている可能性があります。」
以外にはなにもありません。

宜しくお願い致します。

スキルアップ/キャリアアップ(JOB@IT)