Wie erzwinge ich ein vollständiges Post-Back von einer Schaltfläche in einem UpdatePanel?

72

Wie erzwinge ich ein vollständiges Post-Back von einer Schaltfläche in einem UpdatePanel?

André Pena
quelle

Antworten:

89

Mit der Triggers- Eigenschaft des UpdatePanel können Sie Aktionen registrieren, die ein vollständiges Postback auslösen.

Fügen Sie dieser Eigenschaft ein PostBackTrigger- Objekt hinzu, das die ControlID des Steuerelements enthält, das ein vollständiges Postback auslösen muss.

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        ...
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="myFullPostBackControlID" />
    </Triggers>
</asp:UpdatePanel>
Thibault Falise
quelle
Ich habe ein Infragistics UltraWebGrid mit einer Spalte, die aus Schaltflächen besteht. Ich hatte ein Problem, bei dem durch Klicken auf die Schaltflächen die Ereignishandler ausgelöst wurden, wodurch das Raster aktualisiert wurde, das Raster jedoch erst beim zweiten Klick sichtbar aktualisiert wurde. Das Einfügen der Schaltflächen in ein UpdatePanel und das Hinzufügen dieser Trigger löste das Problem.
Tsilb
49

Fügen Sie dies einfach hinzu, weil es sonst niemand hat. Es ist möglich, dies in Code-Behind in einer Codezeile ohne eine der oben genannten Methoden durchzuführen. Fügen Sie dies einfach in page_load ein:

Visual Basic

ScriptManager.GetCurrent(Me).RegisterPostBackControl(myButtonID)

C #

ScriptManager.GetCurrent(this).RegisterPostBackControl(myButtonID);
EvilDr
quelle
3
Sehr schön, nach stundenlangem Suchen endlich eine Lösung, die funktioniert. Das Problem war, dass alle meine Steuerelemente (Update-Bereich und Schaltfläche) im Code dahinter erstellt wurden, sodass kein Postbacktrigger festgelegt werden konnte. Vielen Dank!
OverMars
2
Du solltest in der Lage sein zu. Wenn das Steuerelement erstellt wird, können Sie AddHandler verwenden, um den Auslöser für Ihre antwortende Subroutine
EvilDr
Absolut richtig, es ist so einfach und genau dort ist es mir fast peinlich, dass es mir nie in den Sinn gekommen ist. Sehr schön aber ..
OverMars
Was ist "ich"? Existiert nicht im aktuellen Kontextfehler
Fandango68
2
Ich bin visuell grundlegend für die Seite. Ich denke in C # können Sie verwenden thisoderpage
EvilDr
13

Von hier aus :

Verwenden Sie das PostBackTrigger-Steuerelement, um zu aktivieren, dass Steuerelemente in einem UpdatePanel ein Postback verursachen, anstatt ein asynchrones Postback durchzuführen.

 <Triggers>
    <asp:PostBackTrigger ControlID="controlID" />
 </Triggers>
Aseem Gautam
quelle
Hmm ja, funktioniert aber nicht, wenn Sie in diesem UpdatePanel beispielsweise eine GridView mit Seitenzahlen haben. Wechseln Sie zu einer neuen Seite und die Trigger funktionieren nicht mehr.
Fandango68
0

Ich hatte das gleiche Problem mit einem ImageButton in einem WebDataGrid.

Ich habe stattdessen die Zeile von EvilDr in den preRender für das Webdatagrid eingefügt. Hat super funktioniert!

for (int i = 0; i < wdgMyData.Rows.Count; i++)
{
   ScriptManager.GetCurrent(this).RegisterPostBackControl((ImageButton)wdgMyData.Rows[i].Items[3].FindControl("btnDownloadExcel"));
}
Oystein
quelle
0

Es ist eine alte Frage, es gibt auch einen etwas kniffligen Ansatz, wenn sich alles in Update-Panels befindet und Sie einen vollständigen Beitrag zurückschicken möchten, damit Ihr Document.Ready- Code beim Klicken funktioniert.

1. Erstellen Sie eine Dummy-Schaltfläche außerhalb des Update-Fensters und klicken Sie auf den Code dahinter

ScriptManager.RegisterStartupScript(Page, this.GetType(), "ResetDoc", "ResetDocumentReady();", true);

2. Definieren Sie die Funktion am Frontend folgendermaßen

function ResetDocumentReady() {
        $("[id$=DummyButton]").click();
    }

HINWEIS: Am besten verwenden Sie jedoch den Trigger, die Antwort von @Thibault Falise :)

Ajmal Jamil
quelle