none
ケースにより別窓を開いてPostBackさせるには? RRS feed

  • 質問

  • Aページに「新規窓で結果を表示」と言うボタンと「この窓で結果を表示」と言うボタンを作り、

    「新規窓で結果を表示」のボタンが押された場合には、既存のページはそのままにして新規窓を開いて結果を表示。

    「この窓で結果を表示」のボタンが押された場合には、既存のページを更新して結果を表示。

    と言う動きをするページを作りたいのですが、どうしてもPosBackを使用しボタンクリックイベントを発生させる方法がわかりません。

    どのようなコードを書く事で解決できるのか教えてください。 もしかして、考え方がそもそも間違っていますか?

    例えば、PostBackに似たJavaScriptを準備し、

    theForm.target = '_blank';
    theForm.submit();
    

    上記の用にtarget指定して「新規窓で結果を表示」のボタン時に動く用にする事で新しい窓でPostBackが発生しますが、

    「新規窓で結果を表示」のボタンクリックイベントが発生しません。

    気持ち的には上記JavaScriptのコードに何かを加えれば、ボタンクリックイベントが発生すると思うのですが・・・

    何をどのように追加してよいのかもわからず困っております。

    マスターページにFORM指定があり、ボタンはマスターページを使用する個々のページ内に埋め込んでいます。

    御協力をお願い致します。

    2017年1月10日 12:04

回答

  • ボタンにスクリプトを設定しなくても、サブミットされないのでしょうか。
    ウェブアプリは、サーバーもクライアントもやりとりする度にオブジェクトを作り直します。ポストバックでイベントが発生するためには、どのコントロールがどうなったからサブミットしたのか、と言う情報がいります。その情報を添付していないのではないかと思います。あるいは、サーバー側で消してしまうか。まずは、サブミットされているのかどうか。次にサーバー側でイベントが発生するかどうか、確認してください。

    Jitta@わんくま同盟

    2017年1月12日 9:11

すべての返信

  • 何をしたいのか、何をしているのか、どこでつまづいているのかがぜんぜん分かりません。

    > Aページに「新規窓で結果を表示」と言うボタンと「この窓で結果を表示」と言うボタンを作り、

    どっちのボタンが問題なのですか? 多分前者だけだと想像してますが、それならそちらに絞って状況・問題点を書いてください。

    > どうしてもPosBackを使用しボタンクリックイベントを発生させる方法がわかりません。

    これも意味不明です。Button コントロールを配置して、ブラウザ側でそれをクリックすれば必ずポストバックが発生し、サーバー側で Button.Click イベントが発生するはずなのですが。

    ひょっとして「新規窓」のボタンをクリックした時に「A ページ」にポストバックをかけたいと言ってますか?

    > 例えば、PostBackに似たJavaScriptを準備し、

    これも意味不明です。何をしたいのでしょうか? 何をしているのでしょうか?

    > マスターページにFORM指定があり、ボタンはマスターページを使用する個々のページ内に埋め込んでいます。

    これも分かりません。もっと具体的に書いてください。「FORM指定」とは何ですか?


    #質問する際は、一番最初に、何を作っているのか(ASP.NET Web Forms? その他?)、ご自分の環境(OS, .NET, IIS, Visual Studio のバージョン、DB サーバーとそのバージョン、ブラウザを使っているなら何かなど)に関する情報を最低書いていただけませんか?
     
    #適切に情報が提供されていれば、回答者が質問者さんの状況を的確に把握でき、タイムリーで的を得た回答が得られるということで、質問者さんにもメリットがあります。ガイドラインも出ていますので目を通していただければと思います。
     
    フォーラムのご利用方法(質問の投稿)について
    https://social.msdn.microsoft.com/Forums/ja-JP/b2074c04-2e91-414d-8e9e-d634be311e31

    #それから、できれば、局所的な質問だけでなく、全体のシナリオを含めて何がしたいのかも書くことをお勧めします。そうすれば、局所的な質問の部分は実現が無理 or 他にもっと良い方法があるような場合、「それはできない or そのやり方は適切ではないけど、やりたいことはこうすれば実現できる」というような代案も出てくるかもしれません。
    2017年1月10日 15:04
  • 想像をふくらませてみましたが、以下のようなことですか? 違う場合はどこがどう違うか具体的に書いてください。(その際、前のレスでお願いしたように環境を書いてください)

    (1) ASP.NET Web Forms アプリを作成中。

    (2) A ページに「新規窓で結果を表示」ボタンがある。(「この窓で結果を表示」ボタンの方の話は問題ないと理解して割愛)

    (3) クライアントはブラウザで A ページを表示し何らかの操作を行う。

    (4) クライアントはステップ (3) の操作結果を見るため「新規窓で結果を表示」ボタンをクリック。

    (5) A ページがポストバックされ、ステップ (3) の操作がサーバー側で処理される。

    (6) ポストバックの応答が帰ってきたとき、A ページを再描画すると共に「新規窓」を開いてそれにサーバー側での処理結果を表示する。

    (7) クライアントが「新規窓」に表示された結果を確認する。

    (8) 結果を確認したら「新規窓」を閉じる。A ページはステップ (6) の状態のまま表示されている。

    で、問題はステップ (4) の操作でポストバックしないことですか? それとも、ポストバックはするが、ステップ (5) でボタンクリックイベントが発生しなくてサーバー側での処置ができないことですか?

    #違うかなぁ、普通にやれば両方とも問題なさそうだし・・・ ステップ (6) でポップアップブロックに引っかかるということでもなさそうだし・・・
    2017年1月11日 1:44
  • ボタンにスクリプトを設定しなくても、サブミットされないのでしょうか。
    ウェブアプリは、サーバーもクライアントもやりとりする度にオブジェクトを作り直します。ポストバックでイベントが発生するためには、どのコントロールがどうなったからサブミットしたのか、と言う情報がいります。その情報を添付していないのではないかと思います。あるいは、サーバー側で消してしまうか。まずは、サブミットされているのかどうか。次にサーバー側でイベントが発生するかどうか、確認してください。

    Jitta@わんくま同盟

    2017年1月12日 9:11