QA@IT

ASP.NETでwindow.openで別画面を起動した後の動作に関して

13756 PV

開発環境:ASP.NET(C#.NET VS2010)、.NET Framework4.0

いつもお世話になっております。
現在、親画面から抽出条件をマスタから取得するための別画面を表示する機能を開発しています。
元々はModalPopupDialogにて開発しておりましたが、顧客要望で子画面を親画面の範囲外に表示できるようにとの事で
window.openにて子画面を表示するように変更しました。

子画面を閉じるには、window.closeを使用したらできるのかなとは思うのですが、
閉じる際に、抽出した値を親画面に返したいのですが、どのようにしたらいいのかが分かりません。

親画面はマスターページを用いて作成しています。
親画面から子画面を呼ぶ際は、ボタンのAttributesのonclickに"window.open(子画面のURL,null);return false;)を設定しています。

javascriptsにて記載したことがないため、質問させて頂きました。

よろしくお願いいたします。

  • 回答する前に聞くべきでしたが、要求が「顧客要望で子画面を親画面の範囲外に表示」だけ満足できれば ModalPopup を使うということでもいいのですか? -
  • いつもお世話になっております。
    ModalPopupにて実装した開発案件に対し、スクロールで画面が乱れたりちらつくとの指摘と、親画面を見る必要もあるので枠外に出したいとの要望があります。
    また、私の知識不足からか、ModalPopupに設定していると画面表示などが別画面で設定しているよりもレスポンス悪化していることも指摘を受けました。
    -
  • 「スクロールで画面が乱れたりちらつく」とか「レスポンス悪化」は ModalPopup を使ったことが原因ではないと思われますし、「枠外に出したい」という要望にも対応可能(ModalPopup を最初に枠外に表示するとかドラッグできるようにする)なのですが・・・ それより何より、2 画面同時に操作されることによる思わぬ副作用の方が問題になりそうですね。 -
  • レスポンス悪化はModalPopupとは関係ないんですね。
    別aspxに同様の処理記載していた場合と比べて、初期表示にかかる時間が体感で数倍
    (測定していないので具体的には出してません)かかっていたので、私がModalPopupを
    ちゃんと使えてないため遅くなっていると思っていました。
    あくまでも、子画面のみ処理できるようにして、抽出完了で親画面に戻れるようにしたいです。
    -
  • どういう方向に進まれるのでしょうか? まずはこの質問の問題を解決してからどうするか考えるということでいいのですか? -
  • ユーザからの要望を優先するとしたら、別画面を子画面としたモーダル表示を行い、
    子画面からの情報(文字列)を親画面に渡せるようにしたいと思います。
    -
  • window.open で子画面を開いたのではモーダルになりませんが、ということは、この質問はキャンセルということでいいのですか? -
  • onblur="this.window.focus();"の設定で画面最上位には表示されてはいますが、確かに、モーダルで開くことはできないですよね。
    ModalPopupで枠外へ移動可能にする方が早い気もします。
    -
  • それで、結局、どういう方向に進まれるのでしょうか? 答えを急がせているわけではありませんが、決めたら遅滞なく連絡いただけると幸いです。 -
  • 可能なら、ModalPopupのままで、別ウィンドウのように枠外に出したいです。
    -
  • ModalPopup の方向に進めるなら、ここを閉じて別に新しいスレッドを立てて質問されることをお勧めします。あとから検索などでこのスレッドを見る人のことを考えると、議論は表題の範囲に絞るべきと思いますので。ここにはそのようなルールはないかもしれませんが・・・ -
  • お世話になります。
    確かに、ここの主題と異なる話題になりそうなので。
    ここは完了させて、再度質問させて頂きますね。
    -

回答

子画面を閉じるには、window.closeを使用したらできるのかなとは思うのですが、
閉じる際に、抽出した値を親画面に返したいのですが、どのようにしたらいいのか
が分かりません。

「抽出した値」というのは、たぶん、子画面でポストバックしてサーバー側で抽出するのだと思いますが、そうであれば、以下の記事のようにしてはいかがですか?

window.opener を使って PostBack
http://surferonwww.info/BlogEngine/post/2010/11/04/PostBack-operation-using-window-opener.aspx

上記の例は、子画面でポストバックして DB のレコードを編集してから再描画するときにスクリプトを追加し、それによって親画面をポストバックすると共に子画面を閉じるというシナリオです。

これを、例えば、子画面でポストバックして「抽出した値」を Session に保存 ⇒ 子画面を再描画するときにスクリプトを追加 ⇒ それによって親画面をポストバックすると共に子画面を閉じる ⇒ 親画面はポストバック時にサーバー側で Session に保存された値を取得・・・ということで目的が果たせると思います。

子画面でポストバックしなくても、すべてクライアント側で処置できると言うことであれば、もっと簡単に、window.opener を使って親画面の隠しフィールドなどに値を渡すことが可能だと思います。

#ところで、質問者さんが以前に立てたスレッド http://qa.atmarkit.co.jp/q/4128 が放置状態です。クローズするまでフォローしていただけませんか? ModalPopup で解決する必要がなくなったので中断ということであれば、その旨書いていただければと思います。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。