- - PR -
別ウィンドウへのデータセッション渡しについて(VB)
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-09-29 12:49
現在、以下のような問題で困っています。回避策をご教授頂ければと思います。
ちなみに受渡しデータの内容は外に見せたくないのでRequest.QueryStringは使用せず セッションの受け渡しを使用したいと考えています。 使用言語:VB(Visual Studio 2005にて開発) 【問題点】 親画面のボタンクリック時に、子画面(別ウィンドウ)を開き 子画面に親画面から引き継いだ情報を表示しようとしていますが 親画面からの情報がとれません。 【実装方法】 ●親画面側のコード [Page_Loadメソッド] btna.Attributes("onclick") = "javascript:return window.open('子.aspx')" [btnA_Clickメソッド] Session("ssPrm") = "abc" ※実際には、ここでセットする"abc"というデータは、コンスタントでなく 親画面の入力値を渡しています。 ●子画面側のコード [Page_Loadメソッド] strStore = Session("ssPrm") 【調査結果現状】 親画面で子画面を開くボタン(btnA)をクリックすると 子画面が別ウィンドウで表示され、子画面のPage_Loadメソッドが実行され、 その後で、親画面のbtnA_Clickメソッドが実行されます。 これにより、セッションのデータ設定と取得の順が逆転してしまっていることが原因のようです。 ★以下が実現できれば可能かと思い、これもご教授下さい。 親画面側の[Page_Loadメソッド]内のbtna.Attributes("onclick") を削除し 親画面側の[btnA_Clickメソッド]内で「Session("ssPrm") = "abc"」の後に window.openを実行しようとしましたがwindowの宣言方法がわからなく window.open実行行で”「window」が宣言されていません”というコンパイルエラー となってしまいます。 [ メッセージ編集済み 編集者: プリン 編集日時 2006-09-29 13:01 ] | ||||
|
投稿日時: 2006-09-29 13:12
親画面側の[btnA_Clickメソッド]内で「Session("ssPrm") = "abc"」の後に
子画面を開くJavaScriptをPage.RegisterClientScriptBlockメソッドで登録すればいいかと。 | ||||
|
投稿日時: 2006-09-29 13:18
別ウィンドウにポストバックして画面遷移
| ||||
|
投稿日時: 2006-10-02 12:35
burton999さんへ
ご教授ありがとうございます。 親画面側の[Page_Loadメソッド]内のbtna.Attributes("onclick") を削除し、 親画面側の[btnA_Clickメソッド]内で「Session("ssPrm") = "abc"」の後に 以下を追記し実行しましたが、子ウィンドウは開けませんでした。 Page.RegisterClientScriptBlock("client", "<script language='JavaScript'> window.open('子画面.aspx') </script>") 確認させて下さい。 ・Page.RegisterClientScriptBlockを入れるのは、親画面側の[btnA_Clickメソッド]でOKでしょうか。 ※この時のPageは親画面のページを指しています。 | ||||
|
投稿日時: 2006-10-02 12:43
todoさんへ
返信ありがとうございます。 "return false"部を"return true"に変えて実装したところ実現できました。 但し、子画面が前面に表示されず、親画面が前面に表示されてしまう。 (これから調べてみまーす) この方法で子ウィンドウが複数表示された状態で すでに表示されている特定の子ウィンドウの内容だけ再描画したい場合 親画面で特定の子ウィンドウにだけ指示を出す方法をご教授頂ければ有難いのですが。 | ||||
|
投稿日時: 2006-10-02 16:48
それで問題ないと思います。 少なくとも私のVS2003の環境では動作します。 VS2005でこのへんが変わったとは思えないですが。 ボタンを押した後の親画面のソースを表示して、意図した通りにスクリプトが出力されているかを確認してください。 [ メッセージ編集済み 編集者: burton999 編集日時 2006-10-02 16:49 ] | ||||
|
投稿日時: 2006-10-02 17:56
ASP.NET2.0では推奨されていないですね。。。
Page.RegisterClientScriptBlock メソッド (System.Web.UI) http://msdn2.microsoft.com/ja-JP/library/system.web.ui.page.registerclientscriptblock.aspx | ||||
|
投稿日時: 2006-10-03 06:06
スクリプトからウインドウを上げると、ポップアップ ブロッカーによってブロックされることがあります。
このため、処理的には今のまま、子画面のサーバ側処理で、セッションに入ってくるまで待つ、、、というのを薦めたい。 > 但し、子画面が前面に表示されず、親画面が前面に表示されてしまう。 SmartNavigation を使っているとか。 > すでに表示されている特定の子ウィンドウの内容だけ再描画したい場合 > 親画面で特定の子ウィンドウにだけ指示を出す方法をご教授頂ければ有難いのですが。 簡単なような、難しいような。。。 ヒント:target 次のようなスクリプトを実行させてみましょう。 window.open("url1", "_blank", あと適当); window.open("url2", "_blank", あと適当); window.open("url3", "child", あと適当); window.open("url4", "child", あと適当); window.open("url5", "child1", あと適当); window.open("url5", "child2", あと適当); _________________ |
1