- PR -

Session変数の更新について

1
投稿者投稿内容
L-92
会議室デビュー日: 2007/02/19
投稿数: 3
投稿日時: 2007-02-19 04:09
初めて質問させていただきます。
.NET初心者です。

現在メールフォームのようなものを作っており、
入力画面 -> 確認画面と遷移し、確認画面から入力画面へと
戻ることができ、入力の修正が出来るようなプログラムを
組みたいと思っております。

その際の入力情報をいったんSession変数へと退避しているのですが、
Session変数を反映させたフォームの値をブラウザから修正(入力し直)し、
再度Session変数に値を入れても、それが反映されません。

具体的なコードは以下のような感じです。

●入力画面 Default.aspx
protected HtmlInputText TextBox1;

protected void Page_Load(object sender, EventArgs e){
if (Session["data"] != null)
TextBox1.Value = Session["data"].ToString();
}
protected void Button1_ServerClick(object sender, EventArgs e){
Session["data"] = TextBox1.Value;
Response.Redirect("Default2.aspx");
}

●確認画面 Default2.aspx
protected void Page_Load(object sender, EventArgs e){
if(Session["data"] != null)
Label1.Text = Session["data"].ToString();
}
protected void Button1_ServerClick(object sender, EventArgs e){
Response.Redirect("Default.aspx");
}

Default.aspxのTextBoxに文字を入れてボタンを押しても、
Default2.aspxではその文字が表示されません。
(修正前のSession変数の内容が表示されます)

どこかいけない事をしているところがあると思うんですが。。

どなたか原因等ご存じであれば教えてください。
よろしくお願いいたします。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-02-19 04:28
ボタンを押したときも Page_Load の処理は通ります。ぱっとみそれが原因のような気がします
IsPostBack というプロパティについて調べるといいと思います。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-02-19 06:11
入力したデータをSession変数に保存して復元させるのは、ASP.NET的な
使い方ではないような気がします。

ASP.NETは自分自身をポストバックさせる仕様ですから、Panelなどを使用して
同じページで確認情報を表示させたらどうでしょうか。

どうしても、別ページで確認表示させるときはButtonのPostBackUrlを使用すると
確認ページから要求元のTextBoxを参照することができます。

lblName.Text = CType(Page.PreviousPage.FindControl("txtName"), TextBox).Text

確認ページから入力ページに戻るときは、JavaScriptの「history.back()」を使用します。

<input id="btnBack" type="button" value="Back" onclick="history.back();" />

PostBackUrlを使用して別ページをポストバックさせる
http://www.gxbrbwda.sv02.fsdotnet.net/Goto.aspx?id=070219VB-1
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
L-92
会議室デビュー日: 2007/02/19
投稿数: 3
投稿日時: 2007-02-20 20:20
べるさん、Accessさん、ご回答ありがとうございます。
いろいろ調べましたところ、結局イベントの発生する順番が問題だったようです。

ボタンを押してから、ポストバックされて、Clickイベントの前に
Loadイベントが発生しているため、Sessionに値が代入されるまえに
ラベルにテキストを反映させてしまっているのがよくないようです。

ステップアップ!ADO.NET - Webフォームの処理
http://www.sqlpassj.org/bunkakai/web/series/ado/01.html#03

Default.aspxの方でポストバックがどうかを調べ、ポストバックの
場合にはSessionに値を代入するという方法で回避しました。
ありがとうございました。

> 入力したデータをSession変数に保存して復元させるのは、ASP.NET的な
> 使い方ではないような気がします。

> ASP.NETは自分自身をポストバックさせる仕様ですから、Panelなどを使用して
> 同じページで確認情報を表示させたらどうでしょうか。

アドバイスありがとうございます。
確かに、ポストバックですもんね。
次回はそのようにプログラムを組まさせていただきたいと思います。
1

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