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

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

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

Re[7]: テキストボックスについて


(過去ログ 79 を表示中)

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

■47050 / inTopicNo.1)  テキストボックスについて
  
□投稿者/ たか (24回)-(2010/02/17(Wed) 12:09:36)

分類:[VB.NET/VB2005 以降] 

ASP.NET 2008 VBで開発しています。

テキストボックスについて
 名前のテキストボックスを作成して、チェンジイベントで値を確認すると
 1度目は、値が入ってくるのです、その値を修正しようとすると、値が一度目の値が入ってくるのですが
 
 txtKatakanaSeiを作成し
 txtKatakanaSei_TextChangedの中で、txtKatakanaSeiの値を確認します。
 1度目が "かきくけこ"と入力後 "さしすせそ"と入力します
 txtKatakanaSeiの値が"かきくけこ"となってしまします。
 AutoPostBackはTrueにしています。
 
 変更した値を取得したいのですがどうしたら取得できるのでしょうか?
 よろしくお願いいたします。
引用返信 編集キー/
■47055 / inTopicNo.2)  Re[1]: テキストボックスについて
□投稿者/ Jitta on the way (557回)-(2010/02/17(Wed) 18:24:23)
No47050 (たか さん) に返信
> ASP.NET 2008 VBで開発しています。
>
> テキストボックスについて
>  名前のテキストボックスを作成して、チェンジイベントで値を確認すると
>  1度目は、値が入ってくるのです、その値を修正しようとすると、値が一度目の値が入ってくるのですが
>  
>  txtKatakanaSeiを作成し
>  txtKatakanaSei_TextChangedの中で、txtKatakanaSeiの値を確認します。
>  1度目が "かきくけこ"と入力後 "さしすせそ"と入力します
>  txtKatakanaSeiの値が"かきくけこ"となってしまします。
>  AutoPostBackはTrueにしています。
>  
>  変更した値を取得したいのですがどうしたら取得できるのでしょうか?
>  よろしくお願いいたします。

書いてあることがわかんね(-_-;

一度、テキストファイルに保存しておいて、2〜3時間後に読み直してみることを勧めます。
まず、他人に伝わる文章の書き方を身につけましょう。
引用返信 編集キー/
■47058 / inTopicNo.3)  Re[1]: テキストボックスについて
□投稿者/ こくぶん (43回)-(2010/02/17(Wed) 18:32:57)
No47050 (たか さん) に返信
>  txtKatakanaSeiを作成し
>  txtKatakanaSei_TextChangedの中で、txtKatakanaSeiの値を確認します。
>  1度目が "かきくけこ"と入力後 "さしすせそ"と入力します
>  txtKatakanaSeiの値が"かきくけこ"となってしまします。
>  AutoPostBackはTrueにしています。

txtKatakanaSeiの値はどうやって確認していますか?

# VS2008 / VB9 / ASP.NET Application 環境で試してみましたが、ちゃんと「さしすせそ」が取れています。
引用返信 編集キー/
■47067 / inTopicNo.4)  Re[2]: テキストボックスについて
□投稿者/ たか (26回)-(2010/02/17(Wed) 21:51:43)
>txtKatakanaSeiの値はどうやって確認していますか?
># VS2008 / VB9 / ASP.NET Application 環境で試してみましたが、ちゃんと「さしすせそ」が取れています。

ありがとうございます。
ブレイクポイントで確認をしました。

引用返信 編集キー/
■47077 / inTopicNo.5)  Re[3]: テキストボックスについて
□投稿者/ こくぶん (44回)-(2010/02/18(Thu) 09:15:45)
No47067 (たか さん) に返信
> ありがとうございます。
> ブレイクポイントで確認をしました。

確認したソースと手順を教えていただけますか?

例えば、

Private Sub txtKatakanaSei_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtKatakanaSei.TextChanged
    Dim s As String = txtKatakanaSei.Text   ' ここにブレイクポイント
End Sub

「ここにブレイクポイント」の行にブレイクポイントを設定して、「txtKatakanaSei.Text」の値をチェックした、
と云うことでしょうか?

# もし、上記の通りだとすると、Loadイベントで txtKatakanaSei をいじっているとか、別の理由がある気がします。

引用返信 編集キー/
■47078 / inTopicNo.6)  Re[4]: テキストボックスについて
□投稿者/ たか (27回)-(2010/02/18(Thu) 09:32:46)
No47077 (こくぶん さん) に返信
> ■No47067 (たか さん) に返信
>>ありがとうございます。
>>ブレイクポイントで確認をしました。
>
> 確認したソースと手順を教えていただけますか?
>
> 例えば、
>
> Private Sub txtKatakanaSei_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtKatakanaSei.TextChanged
> Dim s As String = txtKatakanaSei.Text ' ここにブレイクポイント
> End Sub
>
> 「ここにブレイクポイント」の行にブレイクポイントを設定して、「txtKatakanaSei.Text」の値をチェックした、
> と云うことでしょうか?

ありがとうございます。
> Private Sub txtKatakanaSei_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtKatakanaSei.TextChanged
> Dim s As String = txtKatakanaSei.Text ' ここにブレイクポイント
> End Sub
はい、ここで確認しました。

>
> # もし、上記の通りだとすると、Loadイベントで txtKatakanaSei をいじっているとか、別の理由がある気がします。
>
前画面で値をSessionに設定
画面のLoadイベントで、SessionからtxtKatakanaSeiに初期値として設定しています。


引用返信 編集キー/
■47080 / inTopicNo.7)  Re[5]: テキストボックスについて
□投稿者/ こくぶん (45回)-(2010/02/18(Thu) 09:45:52)
No47078 (たか さん) に返信
> 前画面で値をSessionに設定
> 画面のLoadイベントで、SessionからtxtKatakanaSeiに初期値として設定しています。

ポストバック時のイベントは、Load→TextChangedの順番で実行されますので、
その手順だと、セッションに格納されている値(かきくけこ)で上書きしてしまいます。

Loadイベントでの初期値設定は、Page.IsPostBackがFalseのときのみ行う様にすればよいかと思います。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
   If Me.IsPostBack = False Then
       txtKatakanaSei.Text = DirectCast(Session("txtKatakanaSei"), String)
   End If
End Sub

引用返信 編集キー/
■47085 / inTopicNo.8)  Re[5]: テキストボックスについて
□投稿者/ みきぬ (792回)-(2010/02/18(Thu) 10:19:50)
> 前画面で値をSessionに設定
> 画面のLoadイベントで、SessionからtxtKatakanaSeiに初期値として設定しています。
>
なぜこれを書いていて気がつかなかったのか、興味があるなあ。

例えば ASP のように考えていたとか、Windowsフォームのように考えていたとか、
ポストバックのたびにページが毎回作り直される(で、Load イベントが毎回発生する)ことを知らなかったとか。

その理由を知っておくことは、次につながると思う。
引用返信 編集キー/
■47087 / inTopicNo.9)  Re[6]: テキストボックスについて
□投稿者/ たか (28回)-(2010/02/18(Thu) 10:50:25)
ありがとうございます。
ポストバック時のイベントは、TextChanged→Loadの順番で実行されると勘違いしていました
すいませんが教えていただけないでしょうか

1:HiddenFieldがあります
2:Load時に、HiddenFieldにSessionの値を設定しています。(差分を見るために)
3:ポストバック時のイベント時は、Load時に設定した値(HiddenFieldやText等)が、そのまま残っているのでしょうか?
  Loadが起きるたびに毎回設定が必要だと考えていましたので・・・・・
  すいませんがよろしくお願いいたします。

引用返信 編集キー/
■47094 / inTopicNo.10)  Re[7]: テキストボックスについて
□投稿者/ みきぬ (793回)-(2010/02/18(Thu) 12:29:33)
自分の理解にあんまり自信がないので、変なところがあったらつっこみお願いします>どなたか

> 1:HiddenFieldがあります
> 2:Load時に、HiddenFieldにSessionの値を設定しています。(差分を見るために)
> 3:ポストバック時のイベント時は、Load時に設定した値(HiddenFieldやText等)が、そのまま残っているのでしょうか?

(回答)
もうちょっと正確に書くと、ポストバック前の値が残ります。
Load 後にクライアント側の処理(JavaScriptとか)で HiddenField 内の値が書き換わったとしても、書き換わった後の値が残ります。
TextBox に何か入力してからポストバックさせてみると、お手軽に確認できるでしょう。

(理由)
ポストバックするときに HiddenField の値がサーバにポストされます。
ポスト後、ASP.NET がページの内容を復元するのですが、そのときにポストされた値を使って戻してくれます。
戻すタイミングは私もよくわかっていませんが、Load イベントが発生するより前であることは確かです。

(余談)
・TextBox や HiddenField の正体は <input type="text"> だったり <input type="hidden"> だったりするので、値をポストするのにビューステートは使われない。
 ただし、TextChanged イベントを利用するには変更前の値が別途必要で、それはビューステートをつかって保持される。

・「Load イベントの後である」ことからわかるが、TextChanged イベントはポストバック(サーバ処理)の後で発生していることに注意。
引用返信 編集キー/
■47102 / inTopicNo.11)  Re[7]: テキストボックスについて
□投稿者/ こくぶん (46回)-(2010/02/18(Thu) 13:21:52)
No47087 (たか さん) に返信

質問については No47094 のみきぬさんの回答を見て頂くとして。

> 1:HiddenFieldがあります
> 2:Load時に、HiddenFieldにSessionの値を設定しています。(差分を見るために)

「何」と「何」の差分を見たいのでしょうか?

もし、「前画面で設定した値」と「最新の入力値」の差分を見たいのであれば、
別に画面上にHiddenFieldで保持せずとも、必要なときに都度 Session 変数から取得すればいいのではないでしょうか?

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -