2013-12-10 18 views
13

Ho un pulsante dichiarato come questo:Che cosa fa webform_DoPostBackWithOptions()?

<asp:Button id=Send runat="server" EnableViewState="False" 
ToolTip="Email me this report" CssClass="Button" Text="Email me this report"> 
</asp:Button> 

Ma se io Inspect Element in del browser, si vede come questo:

<input type="submit" class="Button" title="Email me this report" 
id="ctl03_Toolbar_Send" onclick="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(“ctl03$Toolbar$Send”,””, true, “”, “”;, false, false))" 
value="Email me this report" name="ctl03$Toolbar$Send"> 

Mi chiedo dove l'evento onclick viene? Che cosa fa?

Grazie per il vostro aiuto in anticipo.

+0

possibile duplicato di [documentazione WebForm \ _PostBackOptions] (http://stackoverflow.com/questions/502060/webform-postbackoptions-documentation) – Jamiec

+0

Spiega gli argomenti. Ma ancora non so come questo metodo viene aggiunto. Non ho impostato alcun attributo onclick. – Joyin

+1

Non hai specificato 'type =" submit "', L'id 'è completamente diverso e il 'runat =" server "' non c'è. Penso che sia necessario rendersi conto che quando si digita 'asp: Button' il runtime asp.net lo cambia in un elemento HTML che il browser deve interpretare. – Jamiec

risposta

6

Se si imposta la proprietà PostBackUrl per il controllo server Button, significa che si tratta di un crosspage post e quindi di asp.net framework anziché normale __DoPostBack() aggiunge "WebForm_DoPostBackWithOptions". Verificare se si dispone di proprietà "PostBackUrl" impostato per questo pulsante

<asp:Button id=Send runat="server" EnableViewState="False" PostBackUrl="~/Page2.aspx" 
ToolTip="Email me this report" CssClass="Button" Text="Email me this report"> 
</asp:Button> 

Se nel tuo caso non è stato impostato il "PostBackUrl", quindi framework ASP.NET anche non aggiunge questo per impostazione predefinita per il controllo Button, quindi questo significa che ci deve essere un altro l'impostazione del OnClick valore di attributo, probabilmente utilizzando il comando dopo un lato sever codice -

PostBackOptions myPostBackOptions = new PostBackOptions(this); 
    myPostBackOptions.ActionUrl = "Page2.aspx"; 
    myPostBackOptions.AutoPostBack = false; 
    myPostBackOptions.RequiresJavaScriptProtocol = true; 
    myPostBackOptions.PerformValidation = true; 

    // Add the client-side script to the HyperLink1 control. 
    Button1.OnClientClick = Page.ClientScript.GetPostBackEventReference(myPostBackOptions); 
+1

Nel mio caso, il problema è venuto da un asp.validatore netto la cui proprietà EnableClientScript è stata impostata su "true"; impostandolo su "false" ha risolto il problema. –

0

Rimuovi "EnableViewState =" false" e dovrebbe utilizzare il postback di default.

Quando il pulsante si imposta di non memorizzare lo stato, userà questa opzione invece, che è collegato al Page Load javascript evento in modo diverso sulla pagina

6

capire che non esiste una cosa come "controlli ASP.NET" nel rendering HTML che le uscite del server web in risposta alla richiesta di un utente. Tutti i controlli ASP.NET do eseguono il rendering di alcuni HTML in modo che tutto funzioni come previsto sul server. Il controllo Button sta emettendo l'attributo "onclick" per attivare alcuni JavaScript che risulteranno nei dati del modulo che vengono postati sul server (supponendo che eventuali validatori lato client non lo impediscano).

La ragione per usare questo metodo per inviare i dati indietro è, come ho appena detto, per dare qualsiasi script lato client la possibilità di correre prima, come ad esempio i controlli di convalida dati che possono controllare e vedere se tutti i campi richiesti sono non compilato.

In sostanza, a meno che non si sta cercando di creare i propri controlli server ASP.NET, non c'è bisogno di preoccuparsi troppo molto su ciò che sta ottenendo emesso come la risposta definitiva da IIS. È bello avere familiarità con ciò che sta accadendo (e certamente non sto dicendo che non dovresti imparare esattamente come i controlli del server fanno la loro cosa), ma non devi essere intimamente familiare con ogni chiamata sul lato client e parametro che ASP.NET sta facendo per iniziare.