C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: ファイルダウンロード時に処理中ダイアログを表示したい。


(過去ログ 87 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■51699 / inTopicNo.1)  ファイルダウンロード時に処理中ダイアログを表示したい。
  
□投稿者/ Hiro (1回)-(2010/07/14(Wed) 14:11:24)

分類:[ASP.NET (C#)] 

2010/07/14(Wed) 14:13:06 編集(投稿者)

はじめまして。
いつも参考にさして頂いてます。
Hiroと申します。

環境はASP.NET 2.0 + Ajaxで作成しています。

処理の流れとしては
1:Excelファイルダウンロードボタン(updatePanel内記述)
2:以前に出力した場合は再度出力するかの確認ダイアログの表示(ScriptManager.RegisterStartupScriptで実装)
3:隠しボタン(updatePanel外記述)をクリック(2の処理で実装)
4:「処理中です…。」ダイアログの表示
(3のボタンをAsyncPostBackTriggerとすることでUpdateProgressで実装)
5:Excelファイルの作成
6:iframeに処理を投げる(?)(ScriptManager.RegisterStartupScriptで実装)
7:iframeでダウンロード処理。
の7つです。
実際には5までの処理はできたのですが、5の処理で以下の6の処理を記述して7を実行したいのですが、
7のPageLoadに入ってきてくれません。

string script = "$get('dummyframe').src='../DownLoad/DownLoad.aspx';";
ScriptManager.RegisterStartupScript(this, Page.GetType(), "download", script, true);

ですが、隠しボタンを表示、押下し、3の処理から実行すると問題なくダウンロードできます。

そこでなぜ、1,2の処理を含むと実行されないのか調べても理由がわかりません。

よろしければ、動作しない理由と対応策をよろしくお願いします。

</pre></pre>
引用返信 編集キー/
■51702 / inTopicNo.2)  Re[1]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ もりお (244回)-(2010/07/14(Wed) 16:07:47)
2010/07/14(Wed) 16:08:27 編集(投稿者)
No51699 (Hiro さん) に返信

隠しボタンを押下した場合に問題がないということであれば
"$get('dummyframe').src='../DownLoad/DownLoad.aspx';"
のスクリプトは問題なさそうですね。

2の処理で実装する隠しボタンの click() メソッドの呼び出しが行われないのかなと思います。
6の処理をこんな感じにして alert が表示されるか確認してみてはいかがでしょうか。
string script = "alert('呼び出されましたよー');";
ScriptManager.RegisterStartupScript(this, Page.GetType(), "download", script, true);

alert が表示されないようであれば、2の処理で実装するスクリプトを見直してみてはいかがでしょうか。

引用返信 編集キー/
■51704 / inTopicNo.3)  Re[2]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ Hiro (2回)-(2010/07/14(Wed) 17:01:42)
2010/07/14(Wed) 17:02:02 編集(投稿者)
返信ありがとうございます。

■No51702 (もりお さん) に返信
> 2の処理で実装する隠しボタンの click() メソッドの呼び出しが行われないのかなと思います。
> 6の処理をこんな感じにして alert が表示されるか確認してみてはいかがでしょうか。
> string script = "alert('呼び出されましたよー');";
> ScriptManager.RegisterStartupScript(this, Page.GetType(), "download", script, true);
> 
> alert が表示されないようであれば、2の処理で実装するスクリプトを見直してみてはいかがでしょうか。

もりおさんがおっしゃる通りに6の処理をアラートに変更し、実行したらalert が表示されませんでした。
デバッグでも確認したら、処理自体は通っているのですが、alertが実行されません。
そこで、5以下の処理を一度コメントアウトにし、
Page_Loadで隠しボタンを押すとアラートを表示するようにしました。
隠しボタン.OnClientClick = "alert('test')";
これだと正常に表示されました。

これは、6での「ScriptManager.RegisterStartupScript」が動作していないと思いました。
どうにかして、この6での「ScriptManager.RegisterStartupScript」が作用される方法はないのでしょうか?

引用返信 編集キー/
■51712 / inTopicNo.4)  Re[3]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ もりお (245回)-(2010/07/14(Wed) 18:42:00)
No51704 (Hiro さん) に返信

> これは、6での「ScriptManager.RegisterStartupScript」が動作していないと思いました。

2で実装する隠しボタンの click() メソッドを呼び出すスクリプトはどのように記述されている
のでしょうか。
スクリプトで行う処理は大きく3つですよね。

・確認ダイアログの表示
confirm('出力するでありますか?');

・隠しボタンの取得
var hiddenButton = $get('hiddenButton');

・隠しボタン.click() メソッドの呼び出し
hiddenButton.click();

いずれかの処理で失敗しているのではないでしょうか。

引用返信 編集キー/
■51714 / inTopicNo.5)  Re[4]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ Hiro (3回)-(2010/07/14(Wed) 20:26:31)
2010/07/14(Wed) 20:30:59 編集(投稿者)

No51712 (もりお さん) に返信
>2で実装する隠しボタンの click() メソッドを呼び出すスクリプトはどのように記述されている
>のでしょうか。

隠しボタンを呼びだすメソッドとしては、

protected void btnStartDL_Click(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "confirm",
"if(confirm('ダウンロードしますか?')){document.getElementById('" + this.btnMakeFile.ClientID + "').click();} ", true);
}
このように記述しています。

その後に、隠しボタンの押下処理が行われます。

protected void btnMakeFile_Click(object sender, EventArgs e)
{
//実際はExcelファイル作成(今はダイアログ表示のため秒数を確保)
Thread.Sleep(4000);

//iframeにとばし、ダウンロード
string script = "alert('DL処理を行う。')";
ScriptManager.RegisterStartupScript(this, Page.GetType(), "downLoad", script, true);  ← ブレークポイント
}

のダウンロード処理が行われるようにしています。

> いずれかの処理で失敗しているのではないでしょうか。

恐らく、btnStartDL_Click()の地点でエラーがあれば、btnMakeFile_Click()メソッドに入らないと思い、
ブレークポイントを
ScriptManager.RegisterStartupScript(this, Page.GetType(), "downLoad", script, true);
に置きbtnStartDL_Click()を実行したのですが、上記のブレークポイントで止まりその後も問題なく
処理が終了します。
これから、2で実装する隠しボタンの click() メソッド自体は失敗してはいないと思っています。

どうかご教授お願いします。
引用返信 編集キー/
■51733 / inTopicNo.6)  Re[5]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ もりお (246回)-(2010/07/15(Thu) 10:31:16)
No51714 (Hiro さん) に返信

> これから、2で実装する隠しボタンの click() メソッド自体は失敗してはいないと思っています。
ふむふむ、状況を再現することができました。お手数をおかけしました。

試してみた限りでは ScriptManager.RegisterStartupScript が作用しなくなる現象は
btnStartDL を UpdatePanel 外に配置して、同期ポストバックすると起きない。
UpdatePanel.Triggers プロパティから btnMakeFile を除去して同期ポストバック
するようにすると起きない。
非同期ポストバックの完了イベントのハンドラーで btnMakeFile.click() を呼び
出すようにすると起きない。

ScriptManager.RegisterStartupScript が作用しなくなる現象は、非同期
ポストバック中に非同期ポストバックが行われる場合に起きるように思います。

回避策としては
・btnStartDL_Click の処理をポストバックせずにクライアント側で行うようにしたり
・btnStartDL クリック後、非同期ポストバックの完了イベントのハンドラーで
btnMakeFile.click() を呼び出すようにしたり
・サーバー側でExcelファイル作成のみ行って、非同期ポストバックの完了イベント
のハンドラーで alert('DL処理を行う。') の処理を行うようにしたり
してみてはいかがでしょうか。

引用返信 編集キー/
■51748 / inTopicNo.7)  Re[6]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ Hiro (4回)-(2010/07/15(Thu) 19:31:56)
No51733 (もりお さん) に返信
> 回避策としては
> ・btnStartDL クリック後、非同期ポストバックの完了イベントのハンドラーで
> btnMakeFile.click() を呼び出すようにしたり
> ・サーバー側でExcelファイル作成のみ行って、非同期ポストバックの完了イベント
> のハンドラーで alert('DL処理を行う。') の処理を行うようにしたり
> してみてはいかがでしょうか。

返信が遅くなり申し訳ありません。

もりおさんがおっしゃった通りに非同期ポストバックの完了イベントのハンドラーで処理を行ってみたいと思います。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -