2010-07-13 9 views
11

Ich habe ein Benutzer-Steuerelement mit Linkbuttons (für Paging) und einen Repeater in einem Update-Panel. Das Paging funktioniert zwar einwandfrei, verursacht jedoch bei jedem Klick auf die nächste Seite einen vollständigen Seiten-Postback.Benutzer Kontrolle innerhalb Update-Panel verursacht volle Seite Postback

Die Update-Panel sieht wie folgt aus:

<asp:UpdatePanel ID="up1" runat="server" UpdateMode="Always"> 
     <ContentTemplate> 
      <asp:Repeater ID="rptOrganizations" runat="server"> 
       <HeaderTemplate> 
        <table> 
         <thead> 
          <tr> 
           <th>Organization</th> 
           <th>State</th> 
           <th>Accredited Since</th> 
          </tr> 
         </thead> 
        </table> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <tr> 
         <td> 
          <asp:Literal ID="ltlInstitution" runat="server" /> 
         </td> 
         <td> 
          <asp:Literal ID="ltlState" runat="server" /> 
         </td> 
         <td> 
          <asp:Literal ID="ltlAccreditedDate" runat="server" /> 
         </td> 
        </tr> 
       </ItemTemplate> 
       <FooterTemplate> 
        </table> 
       </FooterTemplate> 
      </asp:Repeater> 

      <uc2:RepeaterPaging ID="rpPager" runat="server" PageSize="10" OnNextButtonClickEvent="btnNext_Click" OnPreviousButtonClickEvent="btnPrev_Click" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

Und der Inhalt des Steuer Benutzer wie folgt aussehen:

<asp:LinkButton ID="btnPrev" runat="server" OnClick="btnPrev_Click">Previous</asp:LinkButton> | 
<asp:LinkButton ID="btnNext" runat="server" OnClick="btnNext_Click">Next</asp:LinkButton> 

&nbsp;&nbsp; 
<asp:Literal ID="ltlNumResults" runat="server" /> results returned. 

Bisher habe ich versucht, für den Benutzer ein asynchrones Postback-Trigger Hinzufügen Steuerelement, das ein asynchrones Postback verursacht, aber den Rest des Texts in dem Update-Feld nicht aktualisiert. In anderen Worten, das asynchrone Postback tritt auf und die nächste Seite erscheint, aber der ursprüngliche Text in dem Repeater ist auch dort direkt darunter.

Ich habe auch bestätigt, dass ich IDS auf meine Linkbuttons gesetzt habe, da dies ein komplettes Postback in einem Update-Panel auslösen kann.

Ich habe versucht, den Update-Panel-Modus zu ändern (Always, Conditional, ChildrenAsTriggers usw.).

Nichts davon macht einen Unterschied - das einzige, was tatsächlich eine asynchrone Postback verursacht, ist die Verwendung des Auslösers, aber dann wird der Rest des Inhalts in der Update-Leiste nicht aktualisiert, so dass ich doppelte Inhalte erhalten. Irgendwelche Ideen?

+0

Dieses Nugget von Informationen über das Fehlen von IDs auf LinkButtons verursacht einen vollen Postback kam in nützlich für mich, Prost! – paulH

Antwort

15

Vollständiges Postback passiert, wenn Ihr UpdatePanel seinen Inhalt nicht auf <div> (z. B. wenn es innerhalb von <tr> liegt) rendern kann. Überprüfen Sie also html innerhalb von UpdatePanel, Sie könnten die Antwort dort finden (achten Sie auch auf ein falsches xhtml, wie inkorrekt geschlossene Elemente).

+0

Das war es! Wenn Sie innerhalb der Header-Vorlage bemerken, schloss ich versehentlich das-Tag, anstatt es in der Fußzeile zu schließen. Sobald ich das falsch geformte Tag entfernt habe, hat es angefangen zu arbeiten. Ich hatte keine Ahnung, dass das Update-Panel so heikel war ... – Neil

+0

+1: Mein UpdatePanel wurde direkt in ein Tabellen-Tag platziert, und als es dort rausging, fingen die Dinge an zu arbeiten. Vielen Dank! –

0

Entfernen Sie den Update-Modus = "Immer" Legen Sie nichts darüber und es sollte funktionieren.

Noch eine Sache, fügen Sie Skriptmanager zu Ihrer Seite hinzu oder steuern Sie nicht?

Ohne Skript-Manager wird es nicht funktionieren.

+0

Ich denke, der Standard-Update-Modus ist immer - ich habe es entfernt, aber es hat keinen Unterschied gemacht. Der Skriptmanager wird zur Seite und nicht zum Benutzersteuerelement hinzugefügt. – Neil