- - PR -
Session変数の更新について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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変数の内容が表示されます) どこかいけない事をしているところがあると思うんですが。。 どなたか原因等ご存じであれば教えてください。 よろしくお願いいたします。 |
|
投稿日時: 2007-02-19 04:28
ボタンを押したときも Page_Load の処理は通ります。ぱっとみそれが原因のような気がします
IsPostBack というプロパティについて調べるといいと思います。 |
|
投稿日時: 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サンプル集 |
|
投稿日時: 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