it-swarm.com.de

Wie benutzt man __doPostBack ()

Ich versuche, mit __doPostBack() ein asynchrones Postback in ASP.NET zu erstellen, aber ich habe keine Ahnung, wie das geht. Ich möchte Vanilla JavaScript verwenden.

Durch einen einfachen Knopfdruck kann das Ereignis __doPostBack() ausgelöst werden. Ich versuche nur zu lernen, wie der Mechanismus funktioniert.

151
Michael Kerute

Sie können dies in Ihrem Webformular mit einer Schaltfläche namens btnSave versuchen, zum Beispiel:

<input type="button" id="btnSave" onclick="javascript:SaveWithParameter('Hello Michael')" value="click me"/>

<script type="text/javascript">
function SaveWithParameter(parameter)
{
  __doPostBack('btnSave', parameter)
}
</script>

Fügen Sie in Ihrem Code Folgendes hinzu, um den Wert zu lesen und ihn zu verarbeiten:

public void Page_Load(object sender, EventArgs e)
{
  string parameter = Request["__EVENTARGUMENT"]; // parameter
  // Request["__EVENTTARGET"]; // btnSave
}

Probieren Sie es aus und lassen Sie uns wissen, ob das für Sie funktioniert hat.

146
Mr. Mr.

Dies ist auch eine gute Methode, um serverseitige Steuerelemente in FancyBox und/oder jQuery-Dialogfeld zurückzusetzen. Zum Beispiel in FancyBox-div:

   <asp:Button OnClientClick="testMe('param1');" ClientIDMode="Static"  ID="MyButton"  runat="server" Text="Ok" >
</asp:Button>

JavaScript:

function testMe(params) {
    var btnID= '<%=MyButton.ClientID %>';          
    __doPostBack(btnID, params);
}

Serverseitiges PageLoad:

 string parameter = Request["__EVENTARGUMENT"];
 if (parameter == "param1")
     MyButton_Click(sender, e);
23
user2775317

Hier ist ein kurzes Tutorial wie __doPostBack() funktioniert.

Um ehrlich zu sein, ich benutze es nicht viel. zumindest direkt. Viele Serversteuerelemente (z. B. Button, LinkButton, ImageButton, Teile des GridView usw.) verwenden __doPostBack als Beitrag zurück Mechanismus.

13
kbrimington

Ich möchte diesem Beitrag nur etwas hinzufügen für asp:button. Ich habe clientId ausprobiert und es scheint bei mir nicht zu funktionieren:

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

Das Abrufen der UniqueId scheint jedoch wie folgt auf den Server zurückzusenden:

__doPostBack('<%= btn.UniqueID%>', '');

Dies könnte in Zukunft jemand anderem helfen und dies daher veröffentlichen.

7

Alte Frage, aber ich möchte noch etwas hinzufügen: Wenn Sie doPostBack() aufrufen, können Sie die Server-Handler-Methode für die Aktion verwenden.

Zum Beispiel:

__doPostBack('<%= btn.UniqueID%>', 'my args');

Wird auf dem Server ausgelöst:

protected void btn_Click(object sender, EventArgs e)

Ich habe keinen besseren Weg gefunden, um das Argument zu verstehen, also benutze ich immer noch Request["__EVENTARGUMENT"].

2

Wie bereits erwähnt, müssen Sie die UniqueID des Steuerelements für die __doPostback () -Methode bereitstellen.

__doPostBack('<%= btn.UniqueID %>', '');

Auf dem Server werden die übergebenen Formularwerte durch das Namensattribut der Felder auf der Seite identifiziert.

Der Grund, warum UniqueID funktioniert, liegt darin, dass UniqueID und name sind in der Tat dasselbe, wenn das Serversteuerelement in HTML gerendert wird.

Hier ist ein Artikel, der beschreibt, was die UniqueID ist:

Die UniqueID-Eigenschaft wird auch verwendet, um Werte für das HTML-Attribut "name" von Eingabefeldern (Kontrollkästchen, Dropdown-Listen und ausgeblendete Felder) bereitzustellen. UniqueID spielt auch bei Postbacks eine wichtige Rolle. Die UniqueID-Eigenschaft eines Serversteuerelements, das Postbacks unterstützt, stellt Daten für das ausgeblendete Feld __EVENTTARGET bereit. Die ASP.NET Runtime verwendet dann das Feld __EVENTTARGET, um das Steuerelement zu finden, das das Postback ausgelöst hat, und ruft dann die RaisePostBackEvent-Methode auf.

src: https://www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid

0
jBelanger

So mache ich es

    public void B_ODOC_OnClick(Object sender, EventArgs e)
    {
        string script="<script>__doPostBack(\'fileView$ctl01$OTHDOC\',\'{\"EventArgument\":\"OpenModal\",\"EncryptedData\":null}\');</script>";
        Page.ClientScript.RegisterStartupScript(this.GetType(),"JsOtherDocuments",script);               
    }