更新面板未添加新控件,但显示了新控件

时间:2019-06-03 13:01:39

标签: c# asp.net vb.net asp.net-ajax updatepanel

当使用一个简单的示例时,它可以工作,但是当我从其他面板加载控件并进行构建,然后将其添加到更新面板时,它并不会更新它的控件。这里的示例正在工作:

<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>

发生异步回发时,它会在函数下方触发,并且通过添加控件可以正常工作

        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时,它每次都会清除它,而没有任何行代码执行清除控件的操作,并继续从0 10一次又一次从10一次重复执行

1 个答案:

答案 0 :(得分:0)

好的,我发现了如何通过每次添加一个新面板以及在每个新面板中添加新控件来完成此操作。 因此,我只是在会话的页面加载中添加一个计数器,如果它是异步回发,它将增加。

   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