0
我想逐步和動態添加用戶控件到使用AJAX,而不是回傳已加載的頁面。我的問題是在用戶單擊頁面上的按鈕後加載控件。如果只是點擊一切都很好。但是,如果再次點擊該按鈕,第一個控件將被刪除。經過大量研究,我相信這是因爲第一個控件在初始化時未在頁面中註冊。註冊控制後初始化頁面ASP.NET AJAX
是否有一個頁面已經被加載並初始化後,註冊頁面的控制方法是什麼?
我想逐步和動態添加用戶控件到使用AJAX,而不是回傳已加載的頁面。我的問題是在用戶單擊頁面上的按鈕後加載控件。如果只是點擊一切都很好。但是,如果再次點擊該按鈕,第一個控件將被刪除。經過大量研究,我相信這是因爲第一個控件在初始化時未在頁面中註冊。註冊控制後初始化頁面ASP.NET 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