2011-10-19 15 views
0

ポストバックではなくAJAXを使用して既に読み込まれているページに対して、ユーザーコントロールを段階的かつ動的に追加したいと考えています。私の問題は、ユーザーがページ上のボタンをクリックした後にコントロールが読み込まれることです。一度クリックすればすべてが問題ありません。しかし、ボタンを再度クリックすると、最初のコントロールが削除されます。多くの研究の後、最初のコントロールが初期化されたときにそのページに登録されていなかったからだと私は信じています。ページ初期化後のコントロールの登録ASP.NET AJAX

ページが読み込まれて初期化された後でコントロールをページに登録する方法はありますか?

答えて

0

以前と同じIDを持つポストバックに対して、動的に作成されたコントロールを再作成する必要があります。したがって、既に作成されたコントロールの数を格納する必要があります。良い場所はViewStateです。ちなみに、これはAJAXがない場合と同じです。

ASPX

<asp:Button type="button" id="BtnAddButton" runat="server" Text="Add Button" />  
<asp:UpdatePanel runat="server" ID="UpdatePanel1"> 
    <ContentTemplate> 
     <asp:Panel ID="ButtonPanel" runat="server"></asp:Panel> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="BtnAddButton" /> 
    </Triggers> 
    </asp:UpdatePanel> 

分離コード

Public Property ButtonCount As Int32 
    Get 
     Dim VS_ButtonCount = ViewState("ButtonCount") 
     If VS_ButtonCount Is Nothing Then 
      ViewState("ButtonCount") = 0 
     End If 
     Return DirectCast(ViewState("ButtonCount"), Int32) 
    End Get 
    Set(ByVal value As Int32) 
     ViewState("ButtonCount") = value 
    End Set 
End Property 

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    For i As Int32 = 1 To Me.ButtonCount 
     Dim btn As New Button 
     btn.ID = "Button_" & i 
     btn.Text = btn.ID 
     AddHandler btn.Click, AddressOf ButtonClick 
     Me.ButtonPanel.Controls.Add(btn) 
    Next 
End Sub 

Private Sub ButtonClick(ByVal sender As Object, ByVal e As EventArgs) 
    Dim btn = DirectCast(sender, Button) 
End Sub 

Protected Sub BtnAddButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles BtnAddButton.Click 
    Me.ButtonCount += 1 
    Dim btn As New Button 
    btn.ID = "Button_" & ButtonCount 
    btn.Text = btn.ID 
    AddHandler btn.Click, AddressOf ButtonClick 
    Me.ButtonPanel.Controls.Add(btn) 
End Sub 
例えば

関連する問題