2011-10-19 38 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 
相關問題