|  | ■No102167 (伝説のカレー さん) に返信 
 撤退すると言いながら何ですが、気になったので一言・・・
 
 > ぬー不思議な事象ですね
 
 それは不思議では無くて当たり前かと。
 
 サーバー側で起こることとクライアント側で起こることの区別、その順序が理解
 されてなくて、以下のようなことを考えていると思います。
 
 protected void btnXXX_Click(object sender, EventArgs e)
 {
 (1) RegisterStartupScript
 登録するスクリプトの内容は:
 ・JavaScript で子画面を表示
 ・子画面でポストバックして Session を設定
 
 (2) 後続処理
 上の子画面での Session の設定が終わったら
 続いて Session の内容を見て後続処理を行う
 }
 
 そんなことはできません。
 
 親画面のボタンクリックでポストバックされ、サーバー側で btnXXX_Click が動き、
 (1), (2) のコード(及びその他のサーバー側での全ての処理)が終わってから応答
 がブラウザに返ってきてスクリプトが登録され、初めて上の「JavaScript で子画面
 を表示」となります。
 
 その時点では (2) は終わってます。つまり (1) に書いた「子画面でポストバック
 して Session を設定」は (2) の後の話なので、当然 (2) では Session は取得で
 きません。
 
 質問者さんが言う、
 
 > 同じイベントを走らせると、先ほど見えなかった情報(セッション変数、DB共)
 > が嘘のように見えるようになっています。
 
 というのは、(1) で起動した子画面で Session 設定後、親画面でもう一度ボタン
 クリックしてポストバックし、btnXXX_Click を動かしたということでしょうが、
 その時点ではすでに Session は設定済みなので、「嘘のように見える」というこ
 とになったのでしょう。
 
 |