- PR -

フレーム分けした子画面にセッション変数を渡す方法

投稿者投稿内容
PG新人
会議室デビュー日: 2006/01/21
投稿数: 18
お住まい・勤務地: 東京
投稿日時: 2006-01-31 11:17
お世話になります。
ASP.NETでWebアプリの開発をやってます。

セッション変数の受け渡しについての質問です。
親画面のボタンを押下すると、フレーム分けした子画面を表示するような仕組みを
作成しています。
親画面から子画面を表示する際に、window.openを使用しています。
親画面でセッション変数に値を格納し、子画面でそのセッション変数を
取得(VBの変数=Session("変数名"))しようとしているのですが、うまくいきません。
フレーム分けした子画面に親画面で使っていたセッション変数を渡す方法はありますか?

詳しい方にご教授頂きたいです。
よろしくお願い致します。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-01-31 11:28
どんな風にコードを書いています?もしかしてSession変数に格納する前に、window.openを呼んでいませんか?

Session変数への格納はサーバー側で行われるので、当然ポストバックが発生したタイミングで行われることになります。window.openはポストバック発生後に呼び出さなくてはなりません。したがって「ボタンクリック->ポストバック発生->ページロードイベントで子画面を開く」と言った流れになるはずです。

と言った感じにフレーム間の連携が難しく煩雑なコードになるので、特別な理由が無いならASP.NETでフレームを使うのは止めておけと言う話が度々出ていたりするわけです。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
PG新人
会議室デビュー日: 2006/01/21
投稿数: 18
お住まい・勤務地: 東京
投稿日時: 2006-01-31 11:41
>>甕星様

お世話になります。

現在記述している処理の流れは以下の通りです。

@親画面ボタン押下
ASession(変数)=値 で格納
Bwindow.open で子画面(フレーム)を開く
C子画面Page_Load で親画面のSession(変数)を取得

window.openはVB側でRegisterStartupScriptを使用して
JavaScript側の関数で実行しています。

フレーム分けしているファイルは全てaspxファイルです。
おそらく、子画面を開く時にSession自体がフレーム数と
同じ数だけ生成されているのではないかと思うのですが…。

ASP.NETでフレームを使うのは止めておけと言う話は私もよく聞きます…。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-31 13:44
フレームわけされたウインドウで
セッションが消えてしまうということですが

普通の(フレーム分けしていない)ウインドウでも
セッション情報は消えてしまいますか?
PG新人
会議室デビュー日: 2006/01/21
投稿数: 18
お住まい・勤務地: 東京
投稿日時: 2006-01-31 14:07
かるあ様
お世話になります。

フレームを使用していない普通のウィンドウではセッション情報は消えません。

フレームを使用した画面については、
ローカルホストで実行するとセッション情報は消えません。
しかし、サーバーに環境を作りクライアント側で実行すると消えてしまいます。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2006-01-31 15:26
引用:

フレームを使用していない普通のウィンドウではセッション情報は消えません。

フレームを使用した画面については、
ローカルホストで実行するとセッション情報は消えません。
しかし、サーバーに環境を作りクライアント側で実行すると消えてしまいます。



セッション情報が消えるのではなく、SessionIDが別々のものになったのかもしれません。
フレーム分けをしたタイミングによってSessionIDにフレームごとに別のものがふられて、別のインスタンスのIEのように見えることがあります。
各々のフレームにSessionIDを表示させることで判別できます。
もしも、この状態ならばSessionIDが同じになるようにASP.NETのサーバプログラムを呼ぶ部分を通過してから、フレームわけをするといいです。

私が過去に回答したもの
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19057&forum=7&4
そのFrameSetの前に、ASPXのページを置けばできますよ。


もしも、この現象でなければ、この情報は参考にならないでしょうから忘れてください。



_________________
たつごろー http://www.codeseek.net



[ メッセージ編集済み 編集者: たつごろー 編集日時 2006-01-31 15:31 ]
PG新人
会議室デビュー日: 2006/01/21
投稿数: 18
お住まい・勤務地: 東京
投稿日時: 2006-01-31 16:01
たつごろー様
お世話になります。

調査してみたところ、
各々のフレームにSessionIDは、全て同じでした。

フレーム分けは、下記のように2分割にしています。

※FrameTopのファイル名は、webForm0.aspx

<frameset rows="80%,*" id="FrameTop" name="FrameTop">
 <frame id="Frame1" name="Frame1" src="webForm1.aspx" noresize>
 <frame id="Frame2" name="Frame2" src="webForm2.aspx" scrolling="no" >
</frameset>

セッション変数を取得する処理は、webForm1.aspxのPage_Loadで行っています。
調査中にwebForm1.aspxでセッション変数を取得するのではいけないのかと思い、webForm0.aspxで、新たにセッション変数を作成し、
そのセッション変数をwebForm1.aspxで取得しようとしたのですが、
セッション変数の値は取得できませんでした。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2006-01-31 21:44
SessionIDがどこまでつながっているかを追跡してみてはいかがでしょう。

フレームとwindow.openを使っているとのことですので、このどちらで切れる事象になるかによって対処方法がかわってきそうです。


_________________
たつごろー
codeseek
こみゅぷらす

スキルアップ/キャリアアップ(JOB@IT)