La risposta è semplice: La funzione __doPostBack
JavaScript viene chiamata in base a specifici controlli <asp />
e gli eventi che essa gestisce.
La risposta dettagliata: Dipende.
Per prima cosa, copriamo il tuo esempio. Hai un <asp:Button />
che viene reso come standard <input type="submit" />
. Tutto in ASP.NET WebForms ruota attorno al tag standard HTML <form>
. Un codice HTML <form>
viene inviato senza l'uso o l'assistenza di JavaScript tramite clic su un pulsante <input type="submit" />
.
Con questo in mente, si può benissimo vedere (che si è già notato) che l'ha reso il tasto <input type="submit" />
fa non hanno un evento onclick
assegnato. E, come puoi vedere, il modulo viene inviato quando si fa clic sul pulsante.
Quando si tratta del codice back-end (C#/VB.NET/etc.) Viene eseguito quando si fa clic sul pulsante <input type="submit" />
: tutto viene gestito dallo stesso ASP.NET Framework ed è oltre lo scopo di questa domanda/risposta.
In secondo luogo, ora cerchiamo di coprire ciò che __doPostBack
è, e come viene utilizzato.__doPostBack
è semplicemente una funzione JavaScript di supporto utilizzata per inviare l'HTML <form>
. A causa dei motivi illustrati sopra, ora sai perché il pulsante <input type="submit" />
fa non necessario chiamare la funzione __doPostBack
.
Per semplicità, diamo uno sguardo a una pagina ASP.NET, che ha un controllo <asp:DropDownList />
, e ha il gestore SelectedIndexChanged
evento assegnato:
<asp:DropDownList ID="MyDropDownList" AutoPostBack="true" OnSelectedIndexChanged="MyDropDownList_SelectedIndexChanged" runat="server" />
Il <asp:DropDownList />
è reso come segue:
<select id="ctl00_MyDropDownList" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MyDropDownList\',\'\')', 0)" name="ctl00$MyDropDownList"></select>
ignoriamo la funzione setTimeout
nell'evento onchange
- è semplicemente una soluzione alternativa usata da ASP.NET - e concentriamoci su o n la funzione __doPostBack
al suo interno.
Come si può vedere qui, la funzione di __doPostBack
è essere chiamato dal gestore onchange
eventi. La differenza principale è che la modifica del valore di un controllo <asp:DropDownList />
o <select />
non causa l'invio del modulo da parte del browser!
Ancora una volta, ASP.NET Framework gestisce internamente il modo in cui il codice back-end viene eseguito quando viene inviato il modulo (tramite la funzione __doPostBack
o meno).
Infine, per quanto riguarda i dettagli di __doPostBack
: accetta due parametri - eventTarget
e eventArgument
. eventTarget
contiene la proprietà HTML di rendering id
del controllo che causa il postback; e eventArgument
è un parametro facoltativo che può essere utilizzato per passare ulteriori dati al codice back-end.
Edit Informazione supplementare: l'OP ha fatto una domanda molto interessante - cosa succede quando v'è più di un pulsante di invio?
Bene, durante un'operazione POST
, i browser includono lo value
dello <input type="submit" />
che ha causato l'avvio dell'operazione.
Ciò significa che, come si ottengono i valori degli elementi <input />
, è anche possibile chiedere quale pulsante ha causato l'invio!
Mostraci il tuo codice per favore –
_ "dopo il rendering nel browser" _ Penso che tu stia confondendo il codice server e client. –
Penso che dovresti leggere questo http://support.microsoft.com/kb/306459 spiega i controlli serveride di Web Form. In sostanza i postback sono fatti tramite javascript, i campi nascosti __EVENTTARGET e __VIEWSTATE contengono informazioni su ciò che è stato cliccato e i dati sulla pagina rispettivamente.Behine the scenes __EVENTTARGET ecc. Viene interrogato e viene chiamato il gestore di eventi sul lato server appropriato. – bUKaneer