teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

全体的に回答を修正

2016/06/13 08:34

投稿

twck
twck

スコア314

answer CHANGED
@@ -1,1 +1,28 @@
1
- 一度、回答を書きましたが、質問文を見直したら追記があって解決みたいなのでちょっと書き直します。
1
+ 自己解決されようなので、残ている疑問点の参考になるかもしれないこを記述します。
2
+
3
+ まずPostBackされたときにブラウザから送られてきたデータは、以下のようにしてRequest.Formコレクションの内容を表示すれば確認できます。
4
+
5
+ ``` VB.Net
6
+ For Each key As String In Request.Form.Keys
7
+ Dim value As String = Request.Form(key)
8
+ If value Is Nothing Then
9
+ value = "<Nothing>"
10
+ End If
11
+ Debug.WriteLine(key.ToString & ControlChars.Tab & value)
12
+ Next
13
+ ```
14
+
15
+ keyの部分がブラウザに表示された inputタグの name属性の値になります。
16
+ valueの部分がinputタグに入力された文字列になります。
17
+
18
+ ブラウザから送られてきたデータは UniqueIDプロパティの値が name属性の値 と同じTextBoxを探してセットされます。
19
+
20
+ (ちなみに TextBoxの UniqueID は通常 ID と同じですが、MasterPageを使っていると ID の頭に
21
+ MasterPage の ID やら ContentPlaceHolderID やら付加された値になります)
22
+
23
+ なので初回表示時とPostBack時で UniqueIDプロパティの値が異なっていると、ブラウザから送られてきたデータがTextBoxにセットされません。
24
+
25
+ あと、ブラウザから送られてきたデータがTextBoxにセットされるタイミングは、Page.InitCompleteイベント終了後で、Page.PreLoadイベント開始前です。
26
+
27
+ TextBoxを動的に生成している場合は、Page.Initイベント か Page.InitCompleteイベント の中で TextBoxの生成・IDの設定・コントロールをコンテナ(PageやGridViewなど)へ追加するなどを終わらせておかないと、ブラウザから送られてきたデータがTextBoxにセットされません。
28
+

1

回答後に質問内容が変わっていたので書き直し

2016/06/13 08:34

投稿

twck
twck

スコア314

answer CHANGED
@@ -1,29 +1,1 @@
1
- ずはPostBackされときに本当にブラウザから値きているか確認まし
1
+ 一度、回答を書きたが、質問文を見直した追記があっ解決たいなのでちっと書き直します
2
- ブラウザからPostBackされたデータは Request.Formコレクションの中に入ってくるので、
3
- Form.Loadイベント辺りに以下のコードを入れて、デバッグ実行で確認してみてください。
4
-
5
- ``` VB.Net
6
- For Each key As String In Request.Form.Keys
7
- Dim value As String = Request.Form(key)
8
- If value Is Nothing Then
9
- value = "<Nothing>"
10
- End If
11
- Debug.WriteLine(key.ToString & ControlChars.Tab & value)
12
- Next
13
- ```
14
-
15
- MasterPageを使っているとIDの頭に色々と付きますが、その辺は考慮して観察してみてください。
16
-
17
- Request.Formコレクションの中にデータがあるのに TextBoxに反映されない場合は、
18
- TextBoxを生成しているタイミングが遅い可能性があります。
19
-
20
- PostBackされてきた値が TextBoxのTextプロパティにセットされるのは
21
- Page.InitCompleteイベント終了後で、Page.PreLoadイベント開始前なので、
22
- Page.InitイベントかPage.InitCompleteイベントの中で
23
- TextBoxの生成やIDの設定などを終わらせておく必要があります。
24
-
25
- (もしかしたらPage.InitCompleteイベントの後であっても、
26
- GridView.LoadViewStateイベント→RowCreatedイベント辺りでTextBoxを生成すれば
27
- 間に合うかもしれないけど・・・)
28
-
29
- とりあえず今出ている情報で思いつくのはこのくらいです。