ASP.net - LinkButtons in einem Repeater in einem UpdatePanel nicht auslösen eines Postbacks jeglicher Art
Meine Seite enthält einen Repeater, der ist geladen mit Daten asynchron als die Daten verfügbar sind, mit einem UpdatePanel zu verwalten, die asynchrone Anfragen.
Enthält die Seite ein wenig etwas wie dieses:
<asp:UpdatePanel ID="DataUpdatePanel" runat="server">
<ContentTemplate>
<table>
<asp:Repeater ID="RepeaterBlock" runat="server">
<HeaderTemplate><thead><tr><th>Name</th><th>Status</th><th class="empty"></th></tr></thead></HeaderTemplate>
<ItemTemplate><tr>
<td><a class="link" href="Detail.aspx?item=<%# DataBinder.Eval( Container.DataItem, "Name") %>"><%# DataBinder.Eval( Container.DataItem, "Name") %></a>
</td>
<td><%# DataBinder.Eval( Container.DataItem, "Status") %></td>
<td class="no-border">
[<asp:LinkButton CommandName='Schedule' CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Name") %>' ID="ScheduleButton" runat="server" CausesValidation="false" >Schedule</asp:LinkButton>]
</td>
</tr></ItemTemplate>
</asp:Repeater>
</table>
</ContentTemplate>
</asp:UpdatePanel>
Das problem ist, dass der LinkButton nicht angezeigt wird, die zum auslösen eines Postbacks jeglicher Art - es gibt keine sichtbare Reaktion auf einen Klick und setzen Sie einen Haltepunkt auf der Ereignis-listener, die in der codebehind, es wird nie ausgelöst.
Ich habe versucht manuell hinzufügen einen Auslöser wie diesen:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ScheduleButton" />
</Triggers>
Aber leider becausee die Kontrollen sind in der ContentTemplate stürzt es aus, wenn ich versuche, das zu tun.
Einen anderen Weg habe ich erforscht ist explizit fügen Sie in der codebehind:
RepeatData.DataBind();
RepeatData.ItemCommand += new RepeaterCommandEventHandler(RepeatData_ItemCommand);
UpdateScripts.RegisterAsyncPostBackControl(FindControlRecursive( RepeatData, "SchedulButton"));
Den FindControlRecursive Methode nur verhält wie FindControl nur es eigentlich findet Steuerelemente.
Dass nicht abstürzt, aber es ist auch nicht die Ursache der LinkButtons, um wirksam zu werden.
Kann jemand empfehlen, was ich tun müssen, um zu bewirken, dass Sie post zurück, wie ich es von Ihnen erwarten?
Edit: Ursprünglich hatte ich diese Seite arbeitet ohne UpdatePanel und es funktionierte gut, mit mehr Daten es begann timing, so dass ich benötigt, um die Daten asynchron. Es war, als ich diese änderung vorgenommen, dass die linkbuttons aufgehört zu arbeiten.
Es ist nicht in der markup - das ist, warum ich bin, indem es der Repeater in der zweiten Zeile der Ausschnitt aus dem CodeBehind gibt.
InformationsquelleAutor glenatron | 2010-09-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie sich registrieren alle Ihre link-Tasten, um on-command mit einem server-side-event-handler verwenden Sie den CommandName /CommandArg Eigenschaften.
Finden Sie im msdn-Referenz:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandname.aspx
Gotcha, hat Ihr Page_Load-Ereignis get hit auf den link-button klickt? Ändert es nichts, wenn Sie sich registrieren, die OnCommand-Ereignis, DANN databind?
Kein Unterschied zu einer änderung der Reihenfolge der Bindung. Es scheint, dass die linkbuttons sind einfach nichts tut wenn ich auf Sie. Ich denke, der nächste Schritt kann sein, schrittweise durch den JavaScript-aber auch wenn ich die Ursache des Problems gibt, bin ich nicht sicher, wie werde ich ihn einstellen.
Page_Load wird nicht getroffen dann?
Ah, Page_Load wurde geschlagen, aber ich wurde nur initialisiert die event-handler, wenn es nicht ein postback. Anscheinend funktionierte ok, wenn es war synchron, aber nicht mehr. Sie müssen nicht reinitialisiert die Daten im repeater aber Sie haben zum hinzufügen von event-Handler wieder. Weg konsequent zu sein, Microsoft.
InformationsquelleAutor asawyer
Müssen Sie entweder
<asp:Repeater ID="RepeaterBlock" runat="server" OnItemCommand="RepeaterData_ItemCommand">
oder
RepeatData.ItemCommand += new RepeaterCommandEventHandler(RepeatData_ItemCommand);
bei jedem postback vorRepeatData.DataBind();
InformationsquelleAutor Musa Hafalır