更新面板不添加新控件但显示新控件
Update panel not adding new controls but shows the new ones
好吧,当使用一个简单的示例时,它可以工作,但是当我从其他面板加载控件并构建然后将其添加到更新面板时,它不会更新它的控件。这里的例子是有效的:
<asp:UpdatePanel ID="updatePanelRepeater" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:Panel ID="allAccResults" runat="server">
</asp:Panel>
<asp:Label ID="Label21" runat="server" Text="Label"></asp:Label>
<asp:ListBox ID="lbLog" runat="server"></asp:ListBox>
<asp:Button ID="loadMoreAccResultsButton" CssClass="loadMoreAccResultsButton" runat="server" Text="load More" OnClick="loadMoreAccResultsOnPanel" />
</ContentTemplate>
</asp:UpdatePanel>
当异步 post 返回时,它会在函数下方触发,并且通过添加控件可以正常工作
lbLog.Items.Add(Guid.NewGuid().ToString())
allAccResults.Controls.Add(lbLog)
当我加载一个控件并构建它,然后将它添加到面板时,它只会添加新控件,而不是将每个新控件都添加到之前添加的控件中,所以它最终每次都只添加新控件,而我需要来自开始结束
For icount As Integer = TenResultsDataStart To TenResultsDataEnd
m_rbNum = m_rbNum + m_resPerPage
m_accsingleresult = New AccomodationSingleResult
m_accsingleresult = LoadControl("AccomodationSingleResult.ascx")
m_accsingleresult.BuiltControl(m_accResults(icount), m_rbNum)
allAccResults.Controls.Add(m_accsingleresult)
Next
此外,当调试 allAccResults.Controls.Count 没有从 10 增加到 20 再到 30 时,它只是每次都清除它而没有任何行代码执行清除控件并继续执行 10 然后再次从 0 10 一次又一次
好的,我发现了如何通过每次添加一个新面板以及在每个新面板中添加新控件来完成它。
所以我只是在会话中的页面加载中添加一个计数器,如果它是异步回发,那么它将递增。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not (Page.IsPostBack) Then
Session.Item("IndexOfAll") = 0
loadMoreAccResultsOnPanel()
End If
If (ScriptManager.GetCurrent(Page).IsInAsyncPostBack) Then
Session.Item("IndexOfAll") += 1
End If
End Sub
以及从具有异步回发的按钮触发的函数
Protected Sub loadMoreAccResultsOnPanel()
For i As Integer = 0 To Session.Item("IndexOfAll")
Dim pnl As Panel = New Panel()
pnl.ID = "PAnel" & i.ToString()
Dim m_accsingleresult As WebUserControl1
m_accsingleresult = New WebUserControl1
m_accsingleresult = LoadControl("WebUserControl1.ascx")
m_accsingleresult.ID = "m_accsingleresult" & i.ToString()
m_accsingleresult.builtcontrol()
allAccResults.Controls.Add(pnl)
pnl.Controls.Add(m_accsingleresult)
Next
End Sub
至于 WebUserControl1
Public Sub builtcontrol()
lbLog.ID = Guid.NewGuid().ToString()
For i As Integer = 1 To 10
lbLog.Items.Add(i.ToString() + "___" + Guid.NewGuid().ToString())
Next
End Sub
好吧,当使用一个简单的示例时,它可以工作,但是当我从其他面板加载控件并构建然后将其添加到更新面板时,它不会更新它的控件。这里的例子是有效的:
<asp:UpdatePanel ID="updatePanelRepeater" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:Panel ID="allAccResults" runat="server">
</asp:Panel>
<asp:Label ID="Label21" runat="server" Text="Label"></asp:Label>
<asp:ListBox ID="lbLog" runat="server"></asp:ListBox>
<asp:Button ID="loadMoreAccResultsButton" CssClass="loadMoreAccResultsButton" runat="server" Text="load More" OnClick="loadMoreAccResultsOnPanel" />
</ContentTemplate>
</asp:UpdatePanel>
当异步 post 返回时,它会在函数下方触发,并且通过添加控件可以正常工作
lbLog.Items.Add(Guid.NewGuid().ToString())
allAccResults.Controls.Add(lbLog)
当我加载一个控件并构建它,然后将它添加到面板时,它只会添加新控件,而不是将每个新控件都添加到之前添加的控件中,所以它最终每次都只添加新控件,而我需要来自开始结束
For icount As Integer = TenResultsDataStart To TenResultsDataEnd
m_rbNum = m_rbNum + m_resPerPage
m_accsingleresult = New AccomodationSingleResult
m_accsingleresult = LoadControl("AccomodationSingleResult.ascx")
m_accsingleresult.BuiltControl(m_accResults(icount), m_rbNum)
allAccResults.Controls.Add(m_accsingleresult)
Next
此外,当调试 allAccResults.Controls.Count 没有从 10 增加到 20 再到 30 时,它只是每次都清除它而没有任何行代码执行清除控件并继续执行 10 然后再次从 0 10 一次又一次
好的,我发现了如何通过每次添加一个新面板以及在每个新面板中添加新控件来完成它。 所以我只是在会话中的页面加载中添加一个计数器,如果它是异步回发,那么它将递增。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not (Page.IsPostBack) Then
Session.Item("IndexOfAll") = 0
loadMoreAccResultsOnPanel()
End If
If (ScriptManager.GetCurrent(Page).IsInAsyncPostBack) Then
Session.Item("IndexOfAll") += 1
End If
End Sub
以及从具有异步回发的按钮触发的函数
Protected Sub loadMoreAccResultsOnPanel()
For i As Integer = 0 To Session.Item("IndexOfAll")
Dim pnl As Panel = New Panel()
pnl.ID = "PAnel" & i.ToString()
Dim m_accsingleresult As WebUserControl1
m_accsingleresult = New WebUserControl1
m_accsingleresult = LoadControl("WebUserControl1.ascx")
m_accsingleresult.ID = "m_accsingleresult" & i.ToString()
m_accsingleresult.builtcontrol()
allAccResults.Controls.Add(pnl)
pnl.Controls.Add(m_accsingleresult)
Next
End Sub
至于 WebUserControl1
Public Sub builtcontrol()
lbLog.ID = Guid.NewGuid().ToString()
For i As Integer = 1 To 10
lbLog.Items.Add(i.ToString() + "___" + Guid.NewGuid().ToString())
Next
End Sub