Die einfache Antwort: Die __doPostBack
JavaScript-Funktion auf der Grundlage spezifischer <asp />
Kontrollen genannt wird und die Ereignisse, die sie verarbeitet.
Die detaillierte Antwort: Es kommt darauf an.
Zunächst wollen wir Ihr Beispiel behandeln. Sie haben eine <asp:Button />
, die als Standard <input type="submit" />
gerendert wird. Alles in ASP.NET WebForms dreht sich um den Standard HTML <form>
Tag. Ein HTML <form>
wird ohne die Verwendung oder Unterstützung von JavaScript durch Klicken auf eine Schaltfläche gesendet.
In diesem Sinne kann man sehr gut sehen (die Sie bereits bemerkt haben), dass die gerenderte <input type="submit" />
Taste funktioniert nicht haben ein onclick
Ereignis zugeordnet. Und wie Sie sehen können, wird das Formular beim Klicken auf die Schaltfläche gesendet.
Wenn es darum geht, wie der Back-End-Code (C#/VB.NET/etc.) Ausgeführt wird, wenn die <input type="submit" />
-Schaltfläche angeklickt wird: Es wird alles durch das ASP.NET Framework selbst behandelt und ist nicht im Rahmen von diese Frage/Antwort.
Zweitens jetzt wollen wir decken, was __doPostBack
ist und wie es verwendet wird.__doPostBack
ist einfach eine Hilfs-JavaScript-Funktion zum Übermitteln der HTML <form>
. Aus den oben genannten Gründen wissen Sie jetzt, warum die <input type="submit" />
Schaltfläche nicht die __doPostBack
Funktion aufrufen muss.
Der Einfachheit halber wollen wir auf einer ASP.NET-Seite einen Blick darauf werfen, die eine <asp:DropDownList />
Kontrolle hat, und es hat die SelectedIndexChanged
Ereignishandler zugewiesen:
<asp:DropDownList ID="MyDropDownList" AutoPostBack="true" OnSelectedIndexChanged="MyDropDownList_SelectedIndexChanged" runat="server" />
Die <asp:DropDownList />
wie folgt wiedergegeben wird:
<select id="ctl00_MyDropDownList" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MyDropDownList\',\'\')', 0)" name="ctl00$MyDropDownList"></select>
Lassen Sie uns die setTimeout
Funktion im onchange
Ereignis ignorieren - es ist nur eine hacky Workaround von ASP.NET verwendet - und konzentrieren wir uns o n die __doPostBack
Funktion innerhalb davon.
Wie man hier sehen kann, die __doPostBack
Funktion ist vom Handler onchange
Ereignis aufgerufen wird. Der Hauptunterschied besteht darin, dass die Änderung des Werts einer <asp:DropDownList />
oder <select />
Steuerung nicht dazu führt, dass der Browser das Formular abschickt!
Noch einmal behandelt das ASP.NET Framework intern, wie der Back-End-Code ausgeführt wird, wenn das Formular gesendet wird (ob über die __doPostBack
-Funktion oder nicht).
Schließlich ist, wie für die Einzelheiten der __doPostBack
: nimmt es zwei Parameter - eventTarget
und eventArgument
. eventTarget
enthält die gerenderte HTML id
-Eigenschaft des Steuerelements, das das Postback verursacht; und eventArgument
ist ein optionaler Parameter, mit dem zusätzliche Daten an den Back-End-Code übergeben werden können.
bearbeiten Zusätzliche Information: die OP fragte eine sehr interessante Frage - was passiert, wenn es mehr als eine Submit-Button ist?
Nun, während einer POST
Operation gehören Browser die value
der <input type="submit" />
, die den Vorgang verursacht zu initiieren.
Dies bedeutet, dass Sie genau wie Sie die Werte Ihrer <input />
Elemente erhalten, können Sie auch abfragen, für welche Schaltfläche das Senden verursacht hat!
Zeigen Sie uns Ihren Code bitte –
_ "nach dem Rendern im Browser" _ Ich denke, Sie verwirren Server-und Client-Code. –
Ich denke, dass Sie dies lesen sollten http://support.microsoft.com/kb/306459 es erklärt Web Forms serverseitige Kontrollen. Im Wesentlichen werden Postbacks über Javascript ausgeführt, die versteckten Felder __EVENTTARGET und __VIEWSTATE enthalten Informationen darüber, was geklickt wurde bzw. welche Daten auf der Seite angezeigt werden.Die Szenen __EVENTTARGET usw. werden abgefragt und der entsprechende serverseitige Event-Handler aufgerufen. – bUKaneer