|
■No82044 (WebSurfer さん) に返信
ありがとうございます。
大変失礼しました。 .NET frameworkのバージョンは、4.6。 ローカルIISでデバッグ、WindowsServer2012R2のIISが本番環境です。
やりたいことの全体像は、次の通りです。 あるサービスの会員情報(氏名、住所、その他)を編集、更新するページを作ります。 会員情報の内容がとても多いため、 複数のページで構成しようとしています。 最初のページでデータベースから編集可能な会員情報のすべてを取得します。 次のページに移る際に各情報をセッションに保存します。 次のページに移った際に、そのページで編集する内容のセッション情報を各オブジェクト(テキスト等)に転記します。 同時に転記した項目のセッションは破棄します。 さらに次のページに移る際に、各オブジェクトの内容を再びセッションに保存します。 最後のページで、全セッション内容により、データベースを更新します(実際には別行として挿入し、その行を有効に、他の行を無効にします)。
こういうことをやろうとしています。
テスト的に、Test1.aspx、Test2.aspxの2つのページを作りました。
Test1にはButton1があります。
Test2にはButton1、TextBox1、Label1があります。
(Test1のコード) Public Class Test1 Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Session("A") = "A" Session("B") = "B" Response.Redirect("Test2.aspx") End Sub End Class
(Test2のコード)
Public Class Test2 Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If IsPostBack = False Then If Session("A") IsNot Nothing Then TextBox1.Text = CStr(Session("A")) Session.Remove("A")・・・・・・・・・・・・・・・・・※ End If If Session("B") IsNot Nothing Then Label1.Text = CStr(Session("B")) Session.Remove("B") End If End If End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click If TextBox1.Text <> "" Then Session("A") = Trim(TextBox1.Text) End If If Label1.Text <> "" Then Session("B") = Trim(Label1.Text) End If Response.Redirect("Test3.aspx") End Sub End Class
これを実行し、ブラウザの「最新の情報に更新」を押しますと、 TextBox1の"A"が消えます。
コードをよく確認しますと、 ※でSession("A")をRemoveしていますので、 「最新の情報に更新」を押した際に、 TextBox1.Text = CStr(Session("A")) が実行されません。 ただ、TextBox1.Text=""とは記述していないのと、 Bに関しては消えません。
これを改善すべく、 If Session("A") IsNot Nothing Then TextBox1.Text = CStr(Session("A")) Session.Remove("A") End If を、 If Session("A") IsNot Nothing Then TextBox1.Text = CStr(Session("A")) Session.Remove("A") Else TextBox1.Text=TextBox1.Text End If と変えてみましたが、だめでした。
Removeをコメントアウトすれば、"A"は消えないのですが、 不要になったセッションは可能な限り早いタイミングで破棄する、 を行ないたいため、現在の個所にRemoveを入れています。
よろしくお願いします。
> ■No82042 (あさ さん) に返信 > > IE の「最新の情報に更新」(F5 キー)では表示されている .aspx ページを GET 要求 > に行きますが、問題の原因はその時点で Session に TextBox に設定するための情報が > 格納されていない等の手順、タイミングの問題のように思えます。 > > (単なる想像です。質問に提供されている情報だけでは、この程度のことしか自分は言え > ません。これ以上想像をふくらませて回答しても、想像が間違っていると混乱を招くばか > りですので) > >>これを解決する方法がございましたら、ご教示頂けましたら幸いです。 > > 上記のヒントで解決できないようでしたら、問題の TextBox だけでいいので、問題を > 再現できる手順(できればコピペすれば動いて回答者の方でも問題を再現できる必要 > 最低限のコードも)を書いてください。 > > それが不可なら、自分にはこれ以上は対応できませんので、他の回答者の方の回答をお > 待ちください。 > > > #質問する際は局所的な質問だけでなく、全体のシナリオを含めて何がしたいのかを書く > ことをお勧めします。そうすれば、局所的な質問の部分は実現が無理 or 別の方法を > 取った方がいい場合、「それはできない or 適切ではないけど、やりたいことはこう > すれば実現できる」というような代案も出てくるかもしれません。 > > 今回の話では、何となくですが、Session を使うのが適切かどうか考え直した方がよ > さそうな気がします。 > > #開発環境の情報として、Visual Studio, .NET のバージョン、開発に使用しているサー > バー(ASP.NET 開発サーバー or IIS Express or ローカル IIS)も重要な場合が多い > です。次回からはそれらの情報も忘れず書いてください。 >
|