- PR -

動的イベント内で格納したSession変数値が2回目のポストバックで反映?

1
投稿者投稿内容
ひろ
会議室デビュー日: 2004/11/29
投稿数: 13
投稿日時: 2005-03-14 22:45
お世話になります。
ASP.NETに関してご教授頂きたく投稿します。

動的に作成したコントロールと関連付けたイベント内でSession変数に値を格納し、
PostBack後にそれを拾いたいのですが、意図した挙動を示しませんでした。
なぜ、2度目のPostBackで反映されるのでしょうか。ご存知の方がおられましたら
是非ご教授くださいませ。

Private Sub Page_Load(---省略---) Handles MyBase.Load  'またはPage_Init()

  Response.Write(Session("value"))

  --- ここにDropDownList(MyDDL)を動的に生成する処理、(AutoPostback=True)
  'イベント作成
  AddHandler MyDDL.SelectedIndexChanged, AddressOf
  MyDDL_SelectedIndexChanged

End Sub

Private Sub MyDDL_SelectedIndexChanged(---省略---)

  Session("value") = sender.SelectedValue

End Sub

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
動的に生成したドロップダウンリストの値をSession変数に格納し、
Page_Loadメソッドから呼び出した場合、一度のポストバックでは反映されませんでした。
Buttonコントロールを予め用意し、AutoPostBack後に再度PostBackさせると、値が反映され
ます。


[ メッセージ編集済み 編集者: ひろ 編集日時 2005-03-15 18:06 ]

[ メッセージ編集済み 編集者: ひろ 編集日時 2005-03-15 18:07 ]

[ メッセージ編集済み 編集者: ひろ 編集日時 2005-03-15 18:08 ]
ひろ
会議室デビュー日: 2004/11/29
投稿数: 13
投稿日時: 2005-03-15 18:10
内容変更につき上げます。
よろしくお願い致します。
ひろ
会議室デビュー日: 2004/11/29
投稿数: 13
投稿日時: 2005-03-15 18:37
自己レスで申し訳ありせん。

PostBackの問題、Session変数ではなくクエリー文字列で値を渡すことで回避できました。
今回の挙動について、引き続き情報を頂ければ幸いです。
D, an alchemist
会議室デビュー日: 2005/02/02
投稿数: 11
投稿日時: 2005-03-15 19:02
"反映" というのがちょっとわからなかったのですが、
Response.Write で値が出てこない、という事と想定して。

Page_Load と SelectedIndexChanged を比べると、SelectedIndexChanged の方が後に発生します。なので、以下のようになるんじゃないでしょうか。

1) Page_Load でコントロール追加
2) クライアントに結果が返される
3) ドロップダウンで選択し、ポストバック
4) Page_Load で値を取り出すが空
5) SelectedIndexChanged で Session に値を入れる
6) クライアントに結果が返される
7) ドロップダウンで選択し、ポストバック
8) Page_Load で値を取り出し成功

両方のイベントプロシージャ冒頭にブレークポイントはって、デバッグ実行してみると分かるかもしれません。


hope it helps
D, an alchemist.

[ メッセージ編集済み 編集者: D, an alchemist 編集日時 2005-03-15 19:03 ]
ひろ
会議室デビュー日: 2004/11/29
投稿数: 13
投稿日時: 2005-03-16 16:47
>1) Page_Load でコントロール追加
>2) クライアントに結果が返される
>3) ドロップダウンで選択し、ポストバック
>4) Page_Load で値を取り出すが空
>5) SelectedIndexChanged で Session に値を入れる
>6) クライアントに結果が返される
>7) ドロップダウンで選択し、ポストバック
> Page_Load で値を取り出し成功

SelectedIndexChangedのイベントを受けて、先にサーバーで処理された後に
クライアントに結果が返ってくるものだと思っていました。
サーバーとクライアントで処理を切り分けて考えないとつまづいてしまいそうですね。

ありがとうございました。

1

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