C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 「最新の情報に更新」でTextboxの内容を消さないように


(過去ログ 140 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■82042 / inTopicNo.1)  「最新の情報に更新」でTextboxの内容を消さないように
  
□投稿者/ あさ (13回)-(2016/12/02(Fri) 10:33:39)

分類:[ASP.NET (VB)] 

2016/12/02(Fri) 12:10:42 編集(投稿者)
2016/12/02(Fri) 12:08:25 編集(投稿者)

お世話になります。

ASP.NET(VB)、Windows10で開発しています。
また別件でお伺いさせてください。

あるPageをLoadした時に、
このPageにあるTextBox、Label、DropDownList、RadioButtonList、CheckBoxListに、
保持していたSessionの値を表示させています。

ここで、ブラウザの「最新の情報に更新」(Internet Explorer、Microsoft Edge)または「このページを再読み込みします」(Goggle Chrome)
を押すと、
TextBoxの内容が消えてしまいます。
DropDownList、CheckBoxList、RadioButtonListはSession適用前のデフォルト状態に。
Labelの内容は消えません。
これを解決する方法がございましたら、
ご教示頂けましたら幸いです。

どうぞよろしくお願いします。

引用返信 編集キー/
■82044 / inTopicNo.2)  Re[1]: 「最新の情報に更新」でTextboxの内容を消さないように
□投稿者/ WebSurfer (1085回)-(2016/12/02(Fri) 12:30:21)
No82042 (あさ さん) に返信

IE の「最新の情報に更新」(F5 キー)では表示されている .aspx ページを GET 要求
に行きますが、問題の原因はその時点で Session に TextBox に設定するための情報が
格納されていない等の手順、タイミングの問題のように思えます。

(単なる想像です。質問に提供されている情報だけでは、この程度のことしか自分は言え
ません。これ以上想像をふくらませて回答しても、想像が間違っていると混乱を招くばか
りですので)

> これを解決する方法がございましたら、ご教示頂けましたら幸いです。

上記のヒントで解決できないようでしたら、問題の TextBox だけでいいので、問題を
再現できる手順(できればコピペすれば動いて回答者の方でも問題を再現できる必要
最低限のコードも)を書いてください。

それが不可なら、自分にはこれ以上は対応できませんので、他の回答者の方の回答をお
待ちください。


#質問する際は局所的な質問だけでなく、全体のシナリオを含めて何がしたいのかを書く
 ことをお勧めします。そうすれば、局所的な質問の部分は実現が無理 or 別の方法を
 取った方がいい場合、「それはできない or 適切ではないけど、やりたいことはこう
 すれば実現できる」というような代案も出てくるかもしれません。

 今回の話では、何となくですが、Session を使うのが適切かどうか考え直した方がよ
 さそうな気がします。

#開発環境の情報として、Visual Studio, .NET のバージョン、開発に使用しているサー
 バー(ASP.NET 開発サーバー or IIS Express or ローカル IIS)も重要な場合が多い
 です。次回からはそれらの情報も忘れず書いてください。

引用返信 編集キー/
■82045 / inTopicNo.3)  Re[1]: 「最新の情報に更新」でTextboxの内容を消さないように
□投稿者/ WebSurfer (1086回)-(2016/12/02(Fri) 12:45:00)
No82042 (あさ さん) に返信

【追伸】

「これ以上想像をふくらませて回答しても」と書いておきながら何ですが、以下の記事の
"Diagram of a double POST problem encountered in user agents." の図のようなことを
しているとすると POST 要求になるのですが、それが影響しているのかもしれません。

Post/Redirect/Get
https://en.wikipedia.org/wiki/Post/Redirect/Get

これも単なる想像ですが。
引用返信 編集キー/
■82046 / inTopicNo.4)  Re[2]: 「最新の情報に更新」でTextboxの内容を消さないように
□投稿者/ あさ (14回)-(2016/12/02(Fri) 14:16:48)
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)も重要な場合が多い
>  です。次回からはそれらの情報も忘れず書いてください。
>
引用返信 編集キー/
■82047 / inTopicNo.5)  Re[3]: 「最新の情報に更新」でTextboxの内容を消さないように
□投稿者/ WebSurfer (1087回)-(2016/12/02(Fri) 14:51:42)
No82046 (あさ さん) に返信

> あるサービスの会員情報(氏名、住所、その他)を編集、更新するページを作ります。
> 会員情報の内容がとても多いため、
> 複数のページで構成しようとしています。

そういうことは ASP.NET では普通 Wizard とか MultiVew を使って一つのページで行うの
ですが、それは検討されましたか?

Wizard Web サーバー コントロールの概要
https://msdn.microsoft.com/ja-jp/library/fs0za4w6(v=vs.100).aspx

チュートリアル : ASP.NET Wizard コントロールの高度な操作方法
https://msdn.microsoft.com/ja-jp/library/w7dyf6b5(v=vs.100).aspx

1 つの Web ページ内で複数の入力画面を実現する方法
https://msdn.microsoft.com/ja-jp/library/cc671421.aspx

一つのページなので Session で渡すと言うことは不要になり、戻ったり進んだりの操作の
実装もより簡単にできると思います。

なので、Wizard または MultiVew を使えば、今の悩みは全て一気に解消できるのではない
かと思います。

先のレスで、

> 今回の話では、何となくですが、Session を使うのが適切かどうか考え直した方がよ
> さそうな気がします。

と書いたのはそういう理由です。

あくまでも今のやり方(複数ページと Session を使う)でやりたいということであれば
その旨連絡ください。
引用返信 編集キー/
■82048 / inTopicNo.6)  Re[4]: 「最新の情報に更新」でTextboxの内容を消さないように
□投稿者/ あさ (15回)-(2016/12/02(Fri) 15:13:08)
No82047 (WebSurfer さん) に返信

ありがとうございます。

Wizard、MultiViewは存じ上げませんでした。

MultiViewで作った場合に、更新前の内容一覧を出せるか、
各オブジェクトの検証コントロールを設置できるか、
設置できるオブジェクトに制限があるか、等が気になりますが、
まずは使ってみませんと分かりませんので、
テスト的に使用してみます。

ありがとうございます。

> ■No82046 (あさ さん) に返信
>
>>あるサービスの会員情報(氏名、住所、その他)を編集、更新するページを作ります。
>>会員情報の内容がとても多いため、
>>複数のページで構成しようとしています。
>
> そういうことは ASP.NET では普通 Wizard とか MultiVew を使って一つのページで行うの
> ですが、それは検討されましたか?
>
> Wizard Web サーバー コントロールの概要
> https://msdn.microsoft.com/ja-jp/library/fs0za4w6(v=vs.100).aspx
>
> チュートリアル : ASP.NET Wizard コントロールの高度な操作方法
> https://msdn.microsoft.com/ja-jp/library/w7dyf6b5(v=vs.100).aspx
>
> 1 つの Web ページ内で複数の入力画面を実現する方法
> https://msdn.microsoft.com/ja-jp/library/cc671421.aspx
>
> 一つのページなので Session で渡すと言うことは不要になり、戻ったり進んだりの操作の
> 実装もより簡単にできると思います。
>
> なので、Wizard または MultiVew を使えば、今の悩みは全て一気に解消できるのではない
> かと思います。
>
> 先のレスで、
>
>>今回の話では、何となくですが、Session を使うのが適切かどうか考え直した方がよ
>>さそうな気がします。
>
> と書いたのはそういう理由です。
>
> あくまでも今のやり方(複数ページと Session を使う)でやりたいということであれば
> その旨連絡ください。
解決済み
引用返信 編集キー/
■82051 / inTopicNo.7)  Re[5]: 「最新の情報に更新」でTextboxの内容を消さないように
□投稿者/ WebSurfer (1088回)-(2016/12/02(Fri) 18:12:11)
No82048 (あさ さん) に返信

> MultiViewで作った場合に、更新前の内容一覧を出せるか、
> 各オブジェクトの検証コントロールを設置できるか、
> 設置できるオブジェクトに制限があるか、等が気になりますが、

その心配はまずないと思います。

万一何か問題があっても、今のやり方(複数ページと Session を使う)を続けるより、
Wizard または MultiVew を使う方向に方向転換して、そこでの問題を解決するように
した方がよほど容易かつ正解だと思います。

なお、Wizard or MultiVew どちらを使うかですが、手順に従って複数のステップでデ
ータを収集していく場合は Wizard、順次ではなく条件に応じて変化する手順を表示す
る場合は MultiView がよさそうです。


解決済み
引用返信 編集キー/
■82058 / inTopicNo.8)  Re[6]: 「最新の情報に更新」でTextboxの内容を消さないように
□投稿者/ あさ (16回)-(2016/12/04(Sun) 09:50:33)
No82051 (WebSurfer さん) に返信

ありがとうございます。

会員情報の編集においては、順不同で各項目にアクセスできるように、
MultiViewで現在進めており、今のところうまく行っています。

会員情報の編集とは別に、
例えば、ある画面で入力された値によって、
次の画面における表示を変える(ここでは順番が出てきます)、
というところでもSessionを使っていまして、
これをWizardでできるかどうか、検討してみます。

また、会員のマイページにおいてすべての画面の右上に、会員の氏名を表示する(〇〇さん、ログイン中)、
等についてもSessionを使っておりますが、
この点について、もし他の方法がございましたら、
ご教示ください。

ありがとうございます。



> ■No82048 (あさ さん) に返信
>
>>MultiViewで作った場合に、更新前の内容一覧を出せるか、
>>各オブジェクトの検証コントロールを設置できるか、
>>設置できるオブジェクトに制限があるか、等が気になりますが、
>
> その心配はまずないと思います。
>
> 万一何か問題があっても、今のやり方(複数ページと Session を使う)を続けるより、
> Wizard または MultiVew を使う方向に方向転換して、そこでの問題を解決するように
> した方がよほど容易かつ正解だと思います。
>
> なお、Wizard or MultiVew どちらを使うかですが、手順に従って複数のステップでデ
> ータを収集していく場合は Wizard、順次ではなく条件に応じて変化する手順を表示す
> る場合は MultiView がよさそうです。
>
>
引用返信 編集キー/
■82060 / inTopicNo.9)  Re[7]: 「最新の情報に更新」でTextboxの内容を消さないように
□投稿者/ WebSurfer (1089回)-(2016/12/04(Sun) 11:30:03)
No82058 (あさ さん) に返信

引用は必要最低限にとどめてください。例えば以下のような感じです。

> また、会員のマイページにおいてすべての画面の右上に、会員の氏名を表示する(〇〇さん、ログイン中)、
> 等についてもSessionを使っておりますが、
> この点について、もし他の方法がございましたら、
> ご教示ください。

認証方式は何ですか? どうも質問者さん独自の認証方式のように思えますが、そうだとする
と「他の方法」を聞かれても第三者には分かりません。

ASP.NET 標準のフォーム認証か Windows 認証であれば、Page.User.Identity を使うのが普通
です。詳しくは以下の記事を見てください。

ASP.NET の ID オブジェクト
http://surferonwww.info/BlogEngine/post/2014/01/20/id-objects-in-aspnet-page.aspx

その他、LoginView, LoginName, LoginStatus などのコントロールが提供されているので、標
準のフォーム認証であれば、それらを組み合わせ使うこともできます。


この先、このスレッドの本題とは違う認証に関わる話をしたいのであれば、新に別のスレッド
を立てて、そちらで質問するようにしてください。情報の共有ということを考えると、そうす
るのが望ましいのはご理解いただけると思います。

また、Session を使わないという方法に方向転換したのであればこのスレッドはクローズして
いただくようお願いします。あくまでも今のやり方(複数ページと Session を使う)でやり
たいということであれば、その限りではありませんが。

引用返信 編集キー/
■82061 / inTopicNo.10)  Re[8]: 「最新の情報に更新」でTextboxの内容を消さないように
□投稿者/ あさ (18回)-(2016/12/04(Sun) 12:06:46)
No82060 (WebSurfer さん) に返信

承知しました。

認証方式は独自のものですが、研究してみます。
必要に応じて別スレッドにさせて頂きます。
このスレッドはクローズにさせて頂きます。
ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -