簡體   English   中英

頁面初始化ASP.NET AJAX后注冊控件

[英]Register control after page initialized ASP.NET AJAX

我想將用戶控件以遞增方式和動態方式添加到已使用AJAX而不是回發加載的頁面中。 我的問題是在用戶單擊頁面上的按鈕后加載了控件。 如果只單擊一次,一切都很好。 但是,如果再次單擊該按鈕,則第一個控件將被刪除。 經過大量研究,我相信這是因為第一個控件在初始化時未在頁面中注冊。

頁面加載和初始化后,是否可以通過該方法向頁面注冊控件?

您必須使用與以前相同的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM