2010-10-19 14 views
16

Ich konnte etwas ähnliches in SO nicht finden.Partieller Postback mit Javascript

In ASP.NET, gibt es irgendeine Möglichkeit, dass auf Cue ich ein partielles Postback mit Javascript in einem UpdatePanel verursachen kann?
Ich versuchte __doPostBack(), aber es macht einen vollständigen Postback.
Ich kann es mit einem Dummy-Button Trick und click() feuern dann mit dem partiellen Postback auf diese Weise, aber ich möchte einen eleganteren Weg als Tricks.

Danke.

Edit: Ich fand diese disturbedbuddha.wordpress.com/2007/11/26/ ... aber ich kann es nicht = arbeiten (
Ich würde gerne für diese Methode zu arbeiten, denn es perfekt für mich ist weit Also, was ich tun kann, diese letzte Methode ist! Wenn der Timer anfänglich deaktiviert ist, scheint das Starten des Timers kein Postback zu verursachen.Aber ohne Ajax, wenn ich den Timer einfach nur aktiviert habe, sendet er in Intervallen zurück, warum nicht der Ajax-Aufruf verursacht es?

+1

Ich habe getan, das ist die Vergangenheit. Wie? der Dummy-Weg. :) versteckte Schaltfläche, machen Sie es zu einem asynchronen Auslöser, dann feuern Sie das Click-Ereignis. Ich würde auch gerne einen besseren Weg kennen. Das Problem ist, dass das updatepanel einen Trigger benötigt, durch ein Steuerelement, das 'postbackfähig' ist (Button, ddl, etc). – RPM1984

Antwort

31

Sie können einen AsyncPostBackTrigger mit dem UpdatePanel verwenden, um dies zu tun.Da Sie etwas benötigen, das ein Ereignis auslösen kann, ist die Verwendung einer Schaltfläche ziemlich einfach und wenn ausgeblendet wird, funktioniert es.

Wenn dies Ihr Markup:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load"> 
    <ContentTemplate> 
     <!-- Contents... --> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ReloadThePanel" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel> 
<asp:Button ID="ReloadThePanel" runat="server" style="display:none;" /> 

Wenn Sie das Panel aktualisiert werden möchten, müssen Sie nur nennen:

__doPostBack('<%=ReloadThePanel.ClientID %>', null); 

Dies wird ASP.NET denken, dass ReloadThePanel geklickt wurde und Das JavaScript, das aufgrund des Triggers automatisch generiert wird, übernimmt den Rest.

EDIT

Sie können ein reines Update des Update JavaScript tun ohne Trigger oder versteckte Tasten. Sie müssen nur __doPostBack mit der clientseitigen ID als erstes Argument aufrufen.

__doPostBack('<%=UpdatePanel1.ClientID %>', null); 
+0

Kann ich dich das dann fragen? Ich möchte nur den Nutzen davon wissen. Wenn ich den Abschnitt weglasse, und in Javascript ich einfach das Click-Ereignis der Schaltfläche auslösen, wird das nicht den gleichen Effekt haben? Warum den Abschnitt verwenden? – BeemerGuy

+0

Wenn Sie den Abschnitt "Auslöser" weglassen und nur auf die Schaltfläche klicken, wird die gesamte Seite zurückgeschrieben. Wenn Sie Trigger angeben, erzeugt ASP.NET JavaScript, um den Klick zu "fangen" und das Update über AJAX durchzuführen, anstatt eine ganze Seite einzureichen. –

+0

Aber funktioniert Ajax nicht schon? Deshalb bin ich verwirrt darüber. Wenn ich tatsächlich einen Button in einem Update-Panel zeige und ihn tatsächlich anklicke, würde er nicht einfach diesen Abschnitt posten?Warum wird das gezielte Klick-Triggern über Javascript nicht wie ein echter Klick abgefangen? – BeemerGuy

2

Ich benutzte Antwort @MatthewJacobs aber ich fand, dass der Aufruf von __doPostBack eine Laufzeitausnahme auf IE11 verursacht. Ich habe festgestellt, dass der Anruf an __doPostBack durch den folgenden JavaScript-Aufruf ersetzt werden kann, der bei beiden getesteten Browsern (IE11 und Chrome 52) funktioniert hat.

Sys.WebForms.PageRequestManager.getInstance().beginAsyncPostBack(
    [ '<%=UpdatePanel1.ClientID %>' ], '<%=UpdatePanel1.ClientID %>', null 
); 

Weitere Details finden Sie unter Sys.WebForms.PageRequestManager.beginAsyncPostBack Method.

Verwandte Themen