Wenn ich mit einem einfachen Beispiel arbeite, funktioniert es, aber wenn ich ein Steuerelement aus einem anderen Bereich lade und es erstelle und dann zum Aktualisierungsfenster hinzufüge, werden die Steuerelemente nicht aktualisiert. Das Beispiel hier funktioniert:
<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>
Wenn der asynchrone Beitrag zurückkehrt, wird er unterhalb der Funktion ausgelöst und funktioniert durch Hinzufügen von Steuerelementen einwandfrei
lbLog.Items.Add(Guid.NewGuid().ToString())
allAccResults.Controls.Add(lbLog)
Wenn ich ein Steuerelement lade und es erstelle und dann zum Bedienfeld hinzufüge, werden nur die neuen hinzugefügt, nicht jedes neue Steuerelement zum zuvor hinzugefügten, sodass jedes Mal nur neue Steuerelemente hinzugefügt werden, während ich alle Steuerelemente von Anfang bis Ende benötige
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
Auch wenn das Debuggen von allAccResults.Controls.Count nicht von 10 auf 20 auf 30 erhöht wird, wird es jedes Mal gelöscht, ohne dass ein Zeilencode Clear of Controls ausführt, und es wird dann immer wieder von 0 10 und immer wieder ausgeführt
Ok, ich habe herausgefunden, wie dies getan werden kann, indem jedes Mal ein neues Bedienfeld und die neuen Steuerelemente in jedem neuen Bedienfeld hinzugefügt werden. Also füge ich beim Laden einer Seite in einer Sitzung einfach einen Zähler hinzu, und wenn es sich um ein asynchrones Postback handelt, wird es erhöht.
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
Und die Funktion, die über die Schaltfläche mit asynchronem Postback ausgelöst wird
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
Wie für das 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
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen