Панель обновления не добавляет новые элементы управления, но показывает новые - PullRequest
1 голос
/ 03 июня 2019

Хорошо, при работе с простым примером это работает, но когда я загружаю элемент управления из другой панели и собираю, а затем добавляю его в панель обновления, он не обновляет элементы управления. Пример здесь работает:

<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, он просто очищает его каждый раз без какого-либо строкового кода, выполняющего очистку элементов управления, и продолжает делать это 10, затем снова с 0 10 и снова и снова

1 Ответ

0 голосов
/ 05 июня 2019

Хорошо, я узнал, как это можно сделать, добавляя новую панель каждый раз и новые элементы управления в каждой новой панели.Поэтому я просто добавляю счетчик при загрузке страницы в сеансе и, если это асинхронная обратная передача, он будет увеличиваться.

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