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

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

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

Re[4]: ASP.Net ポストバック時の値の保持について


(過去ログ 31 を表示中)

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

■14752 / inTopicNo.1)  ASP.Net ポストバック時の値の保持について
  
□投稿者/ シェリー (1回)-(2008/02/26(Tue) 18:13:05)

分類:[ASP.NET (VB)] 

OS:Windows2000 Pro
開発環境:VB.Net2002


初めまして。ASP.Netのポストバックの処理で質問があります。
下記のソースの様にボタン、テキストボックス、コンボボックスを配置します。
Page_Load時にTableに対してrow、cellを追加し、
その中にコンボボックス、テキストボックスを追加しています。
この時に、ボタンを押下しポストバック処理が走るとテキストボックスの内容は保持されるのですが
コンボボックスの選択状態が初期化されて値の保持ができないため困っております。

初歩的な質問かもしれませんが、回避策などありましたら、どなたかご教授願えないでしょうか?


【ソース WebForm1.aspx.vb】
Public Class WebForm1
Inherits System.Web.UI.Page
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents Table1 As System.Web.UI.WebControls.Table
Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox
Protected WithEvents DropDownList1 As System.Web.UI.WebControls.DropDownList

#Region " Web フォーム デザイナで生成されたコード "

'この呼び出しは Web フォーム デザイナで必要です。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
' CODEGEN: このメソッド呼び出しは Web フォーム デザイナで必要です。
' コード エディタを使って変更しないでください。
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

If IsPostBack = False Then
Me.DropDownList1.Items.Add(New ListItem("東京", "1"))
Me.DropDownList1.Items.Add(New ListItem("大阪", "2"))
Me.DropDownList1.Items.Add(New ListItem("横浜", "3"))
Me.DropDownList1.Items.Add(New ListItem("名古屋", "4"))
Me.DropDownList1.Items.Add(New ListItem("札幌", "5"))
End If

Dim row As TableRow = New TableRow()
Dim cell1 As TableCell = New TableCell()
Dim cell2 As TableCell = New TableCell()
cell1.BorderWidth = UI.WebControls.Unit.Pixel(3)
cell2.BorderWidth = UI.WebControls.Unit.Pixel(3)

Me.Table1.Rows.Add(row)

row.Cells.Add(cell1)
row.Cells.Add(cell2)

cell1.Controls.Add(Me.DropDownList1)
cell2.Controls.Add(Me.TextBox2)


End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

End Sub
End Class


【ソース WebForm.aspx】
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="FloodForecast.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0">
<meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body bgColor="beige">
<form id="Form1" method="post" runat="server">
<P>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button></P>
<P><FONT face="MS UI Gothic"><BR>
<BR>
<asp:Table id="Table1" runat="server" BorderWidth="3px" BorderColor="Black" Width="130px"></asp:Table><BR>
<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList><BR>
<BR>
<asp:TextBox id="TextBox2" runat="server" Width="159px"></asp:TextBox>
</FONT>
</P>
</form>
</body>
</HTML>



引用返信 編集キー/
■14753 / inTopicNo.2)  Re[1]: ASP.Net ポストバック時の値の保持について
□投稿者/ Jitta on the way (41回)-(2008/02/26(Tue) 18:45:24)
No14752 (シェリー さん) に返信

Table の作成をやめたらどうなりますか?
引用返信 編集キー/
■14754 / inTopicNo.3)  Re[1]: ASP.Net ポストバック時の値の保持について
□投稿者/ やじゅ (187回)-(2008/02/26(Tue) 18:56:14)
2008/02/26(Tue) 19:07:29 編集(投稿者)

No14752 (シェリー さん) に返信
> コンボボックスの選択状態が初期化されて値の保持ができないため困っております。

ドロップダウンリストですが、PostBackしたときもそのドロップダウンリストに
表示するデータを追加する処理がPage_Loadに入ってますね。

この場合、PostBackであってもPage_Loadで1つ目のドロップダウンリストが
再度新たに作成することになって、ブラウザから返って来た値は無視されます。

おとっと、IsPostBackプロパティを見てるので、問題なしですね、うーむ(^^;
引用返信 編集キー/
■14756 / inTopicNo.4)  Re[2]: ASP.Net ポストバック時の値の保持について
□投稿者/ シェリー (2回)-(2008/02/26(Tue) 19:05:09)
No14753 (Jitta on the way さん) に返信
> ■No14752 (シェリー さん) に返信
>
> Table の作成をやめたらどうなりますか?

お返事ありがとうございます。
テーブルの作成をやめて下記のように、コメント化すると値は保持されます。
当然、コンボボックスの場所はTableの中には入らないのですが…
'cell1.Controls.Add(Me.DropDownList1)

引用返信 編集キー/
■14757 / inTopicNo.5)  Re[2]: ASP.Net ポストバック時の値の保持について
□投稿者/ シェリー (3回)-(2008/02/26(Tue) 19:10:39)
No14754 (やじゅ さん) に返信
> ■No14752 (シェリー さん) に返信
>>コンボボックスの選択状態が初期化されて値の保持ができないため困っております。
>
> ドロップダウンリストですが、PostBackしたときもそのドロップダウンリストに
> 表示するデータを追加する処理がPage_Loadに入ってますね。
>
> この場合、PostBackであってもPage_Loadで1つ目のドロップダウンリストが
> 再度新たに作成することになって、ブラウザから返って来た値は無視されます。

お返事ありがとうございます。
コンボボックスを作成する処理は If IsPostBack = False Then の条件内に入れることにより
ポストバックされた時には作成されないようにしているのですが、条件分岐しているだけでもダメなのでしょうか?
一応デバッガでブレークポイントを張って試してみたのですが、ポストバック時には処理されていないようでした。
よろしくお願いいたします。
引用返信 編集キー/
■14758 / inTopicNo.6)  Re[3]: ASP.Net ポストバック時の値の保持について
□投稿者/ Jitta on the way (42回)-(2008/02/26(Tue) 19:20:20)
No14756 (シェリー さん) に返信
> ■No14753 (Jitta on the way さん) に返信
>>■No14752 (シェリー さん) に返信
>>
>>Table の作成をやめたらどうなりますか?
>
> お返事ありがとうございます。
> テーブルの作成をやめて下記のように、コメント化すると値は保持されます。
> 当然、コンボボックスの場所はTableの中には入らないのですが…
> 'cell1.Controls.Add(Me.DropDownList1)
>

いえいえ、テーブルそのものがいらないのでは?aspx ファイルに書いてありますよね?

今は携帯電話の PC サイトビューアーで見ているので、見落としているかもしれませんが。
TableRow はつくられていますが、Table そのものは?

根本的には、なにがしたいのかにもかかってきますが、画面上の要素を作るのは、コンストラクタでやってください。
あ、バス停だ
引用返信 編集キー/
■14769 / inTopicNo.7)  Re[4]: ASP.Net ポストバック時の値の保持について
□投稿者/ Jitta (455回)-(2008/02/26(Tue) 21:21:48)
Jitta さんの Web サイト
No14758 (Jitta on the way さん) に返信

> あ、バス停だ

途中で失礼しました。


> <asp:Table id="Table1" runat="server" BorderWidth="3px" BorderColor="Black" Width="130px"></asp:Table><BR>
> <asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList><BR>
> <BR>
> <asp:TextBox id="TextBox2" runat="server" Width="159px"></asp:TextBox>

む???よく見ると、DropDownList1 と TextBox2 は、テーブルの外にあるのですね?!

で、この状態で、1投目の内容で、TextBox の内容は保持されるが、DropDownList の選択は保持されない、ということでしょうか。
では、内容は保持されているのでしょうか。


 まぁ、その答えを待っていると、次に私が書き込みできるのが明日の夜になるので。

> Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
> ' CODEGEN: このメソッド呼び出しは Web フォーム デザイナで必要です。
> ' コード エディタを使って変更しないでください。
> InitializeComponent()
ここに、テーブルに行を追加して、TextBox と DropDownList を追加する処理を移動してみてください。
> End Sub
引用返信 編集キー/
■14770 / inTopicNo.8)  Re[1]: ASP.Net ポストバック時の値の保持について
□投稿者/ はつね (473回)-(2008/02/26(Tue) 21:36:06)
No14752 (シェリー さん) に返信
>         If IsPostBack = False Then
>             Me.DropDownList1.Items.Add(New ListItem("東京", "1"))
>             Me.DropDownList1.Items.Add(New ListItem("大阪", "2"))
>             Me.DropDownList1.Items.Add(New ListItem("横浜", "3"))
>             Me.DropDownList1.Items.Add(New ListItem("名古屋", "4"))
>             Me.DropDownList1.Items.Add(New ListItem("札幌", "5"))
>         End If

PostBackじゃなかったときは、ここで初期データを入れてますね。
PostBackのときは、この設定されたデータと選択している項目情報がPostBackされてくるのでここは不要で
問題ない訳ですね。


>         Me.Table1.Rows.Add(row)
> 
>         row.Cells.Add(cell1)
>         row.Cells.Add(cell2)
> 
>         cell1.Controls.Add(Me.DropDownList1)
>         cell2.Controls.Add(Me.TextBox2)

一方、Tableの方はPostBackかどうか関係なしに毎回実行していますね。
本来であれば、この部分はボタンをクリックしたときに実行されるものですからButton1_Clickの中に記述すべきだと
思います。そうじゃないとブラウザの再読み込みでも行がふえていきませんか?

そして、cell1.Controls.AddはMe.DropDownList1のリストの内容はコピーされますが選択値までは設定されなかった
はず(ここ未確認なのでMSDNで調べるかステップ実行で確認してみて)なので、明示的に選択値を設定してあげない
といけないはず。

引用返信 編集キー/
■14811 / inTopicNo.9)  Re[2]: ASP.Net ポストバック時の値の保持について
□投稿者/ シェリー (4回)-(2008/02/27(Wed) 12:50:32)
>ここに、テーブルに行を追加して、TextBox と DropDownList を追加する処理を移動してみてください。

ご指示通りPage_Initに処理を追加したらうまくいきました。
Page_Loadではうまくいかないんですね。


>そうじゃないとブラウザの再読み込みでも行がふえていきませんか?
何度ポストバックしても行は増えていくことはありませんでした。
自動的にテーブルの行がクリアされているのでしょうか?

引用返信 編集キー/
■14812 / inTopicNo.10)  Re[3]: ASP.Net ポストバック時の値の保持について
□投稿者/ シェリー (5回)-(2008/02/27(Wed) 12:51:24)
>ここに、テーブルに行を追加して、TextBox と DropDownList を追加する処理を移動してみてください。
ご指示通りPage_Initに処理を追加したらうまくいきました。
Page_Loadではうまくいかないんですね。


>そうじゃないとブラウザの再読み込みでも行がふえていきませんか?
何度ポストバックしても行は増えていくことはありませんでした。
自動的にテーブルの行がクリアされているのでしょうか?

皆さんのおかげでうまくいきました。
ありがとうございます。
解決済み
引用返信 編集キー/
■14813 / inTopicNo.11)  Re[4]: ASP.Net ポストバック時の値の保持について
□投稿者/ シェリー (6回)-(2008/02/27(Wed) 12:51:29)
No14812 (シェリー さん) に返信
> >ここに、テーブルに行を追加して、TextBox と DropDownList を追加する処理を移動してみてください。
> ご指示通りPage_Initに処理を追加したらうまくいきました。
> Page_Loadではうまくいかないんですね。
>
>
> >そうじゃないとブラウザの再読み込みでも行がふえていきませんか?
> 何度ポストバックしても行は増えていくことはありませんでした。
> 自動的にテーブルの行がクリアされているのでしょうか?
>
> 皆さんのおかげでうまくいきました。
> ありがとうございます。
引用返信 編集キー/
■14858 / inTopicNo.12)  Re[4]: ASP.Net ポストバック時の値の保持について
□投稿者/ Jitta on the way (44回)-(2008/02/27(Wed) 19:13:06)
No14812 (シェリー さん) に返信
> >ここに、テーブルに行を追加して、TextBox と DropDownList を追加する処理を移動してみてください。
> ご指示通りPage_Initに処理を追加したらうまくいきました。
> Page_Loadではうまくいかないんですね。

イベントの発生順序を調べてください。そうすれば、なぜ Load がだめで、Init ならよいか、わかると思います。
# と言ってる本人が忘れてるのは内緒。

解決済みにチェックしておきますね。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -