2012-03-05 3 views
3

私はコントロールをコードの中にプログラムでページに追加しています。私は、ASP:ラベルを追加し、テキスト値を設定します。私はasp:TextBoxを追加し、Text値を設定します。両方のテキスト値がレスポンスに返され、ブラウザに表示されます。これまでのすべての罰金。負けている<asp:Label>動的に追加されたコントロールのViewStateからのテキスト値

ユーザーがポストバックを引き起こすアクションを実行します。動的に追加されたasp:Labelとasp:TextBoxを再ロードします。レスポンスがブラウザに返されると、asp:TextBox Text値だけが表示されます。 asp:Label Text値はそうではありません。

HTMLを調べると、asp:Labelコントロール(HTMLスパンタグとして表示)が表示されますが、値は表示されません。

各ポストバックのasp:LabelのText値を自動的に再読み込みするコードを取得するにはどうすればよいですか? asp:Labelとasp:TextBoxの動作が異なるのはなぜですか?私は手動で各ポストバックのテキスト値を再設定する必要はありません。ここで

は私がやっているものと同様のいくつかのコードです(placeHolderNameplatesをASPです:aspxページ上のプレースホルダコントロール):

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 
    If Not Page.IsPostBack Then 
     Dim lbl As Label = New Label() 
     lbl.ID = "xxx1" 
     lbl.Text = "yo" 
     placeHolderNameplates.Controls.Add(lbl) 

     Dim tb As TextBox = New TextBox 
     tb.ID = "xxx2" 
     tb.Text = "yoyo" 
     placeHolderNameplates.Controls.Add(tb) 

    Else 
     Dim lbl As Label = New Label() 
     lbl.ID = "xxx1" 
     placeHolderNameplates.Controls.Add(lbl) 

     Dim tb As TextBox = New TextBox 
     tb.ID = "xxx2" 
     placeHolderNameplates.Controls.Add(tb) 

    End If 

答えて

4

は、それが Dim lbl As Label = New Label()
placeHolderNameplates.Controls.Add(lbl)
lbl.ID = "xxx1"
lbl.Text = "yo"

これらの記事を参照してくださいする必要がありますので、値を設定する前に、プレースホルダにコントロールを追加することです詳細: http://www.yakkowarner.com/2008/01/aspnet-dynamic-controls-and-viewstate.html http://codebetter.com/jefferypalermo/2004/11/25/key-to-ensuring-dynamic-asp-net-controls-save-viewstate-level-300/

ページに追加される前に、それらは初期化されていません。ダイナミックコントロールが別のコントロールに追加されると、新しいコントロールがキャッチアップされて、親コントロールがあるステージに移動します。たとえば、Page_Load内にテキストボックスを追加すると、キャッチアップと移動が実行されますそのInitおよびLoadフェーズを介して。これは、viewstateの追跡を開始することが重要です。ビューステートを追跡する前に追加された値はビューステートにはならず、PostBackで失われます。

0

動的に作成されたコントロールが自動的にViewStateに追加されませんように思えます。 TextBoxコントロールは、その要素の値を保持しますが、それは<input type="text" value="xyz" /> html要素にレンダリングされる性質があるためです。

は、この記事を見てください:あなたがする必要がどのような

http://www.codeproject.com/Articles/3684/Retaining-State-for-Dynamically-Created-Controls-i

0

ダイナミックコントロールを追加します http://support.microsoft.com/kb/317794/en-us

のねえあなたは、次のイベントにあなたのコントロールを追加する必要があります(ので、自動に維持するビューステート)thsiサイトにMSDN

をチェック

override protected void OnInit(EventArgs e) 

関連する問題