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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.51699 の関連記事表示

<< 0 >>
■51699  ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ Hiro -(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>
親記事 /過去ログ87より / 関連記事表示
削除チェック/

■51702  Re[1]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ もりお -(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の処理で実装するスクリプトを見直してみてはいかがでしょうか。
記事No.51699 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51704  Re[2]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ Hiro -(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」が作用される方法はないのでしょうか?
記事No.51699 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51712  Re[3]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ もりお -(2010/07/14(Wed) 18:42:00)
    No51704 (Hiro さん) に返信
    
    > これは、6での「ScriptManager.RegisterStartupScript」が動作していないと思いました。
    
    2で実装する隠しボタンの click() メソッドを呼び出すスクリプトはどのように記述されている
    のでしょうか。
    スクリプトで行う処理は大きく3つですよね。
    
    ・確認ダイアログの表示
    confirm('出力するでありますか?');
    
    ・隠しボタンの取得
    var hiddenButton = $get('hiddenButton');
    
    ・隠しボタン.click() メソッドの呼び出し
    hiddenButton.click();
    
    いずれかの処理で失敗しているのではないでしょうか。
    
記事No.51699 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51714  Re[4]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ Hiro -(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() メソッド自体は失敗してはいないと思っています。

    どうかご教授お願いします。
記事No.51699 のレス /過去ログ87より / 関連記事表示
削除チェック/

■51733  Re[5]: ファイルダウンロード時に処理中ダイアログを表示したい。
□投稿者/ もりお -(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処理を行う。') の処理を行うようにしたり
    してみてはいかがでしょうか。
    
記事No.51699 のレス /過去ログ87より / 関連記事表示
削除チェック/

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

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

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

    ありがとうございました。
記事No.51699 のレス / END /過去ログ87より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -