2013-12-10 8 views
13

Ich habe wie diese eine Taste erklärt:Was macht webform_DoPostBackWithOptions()?

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

Aber wenn ich in Browser Element tun Inspizieren, zeigt es wie folgt aus:

<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"> 

Ich frage mich, wo das Onclick-Ereignis herkommt? Was tut es?

Vielen Dank für Ihre Hilfe im Voraus.

+0

möglich Duplikat der [WebForm \ _PostBackOptions-Dokumentation] (http://stackoverflow.com/questions/502060/webform-postbackoptions-documentation) – Jamiec

+0

Es erklärt die Argumente. Aber ich weiß immer noch nicht, wie diese Methode hinzugefügt wird. Ich habe kein onclick-Attribut gesetzt. – Joyin

+1

Sie haben auch 'type =" submit "' nicht angegeben. Die 'id' ist völlig anders und die' runat = "server" 'ist nicht da. Ich denke, Sie müssen nur erkennen, dass, wenn Sie ASP: Button eingeben die ASP.net-Laufzeit ändert, dass zu einem HTML-Element für den Browser zu interpretieren. – Jamiec

Antwort

6

Wenn Sie die PostBackUrl -Eigenschaft für das Button-Server-Steuerelement festlegen, bedeutet dies, dass es Seitenübergreifende Postings und dann asp.net Framework anstelle von normalen __DoPostBack() fügt "WebForm_DoPostBackWithOptions". Überprüfen Sie, ob Sie "PostBackUrl" -Eigenschaft haben für diese Taste einstellen

<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> 

Wenn Sie in Ihrem Fall nicht "PostBackUrl" festgelegt haben, fügt das ASP.NET Framework dies auch nicht standardmäßig für Button Control hinzu. Dies bedeutet, dass ein anderes Steuerelement den OnClick-Attributwert wahrscheinlich mit der folgenden Server-Seite festlegen muss Code - Verstehen

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

In meinem Fall kam das Problem von einem asp.Net Validator, dessen EnableClientScript-Eigenschaft auf "True" festgelegt wurde; Setzen Sie es auf "falsch" gelöst das Problem. –

0

Remove „EnableViewState =“ False“und es soll das Standard-Postback verwenden.

Wenn Sie Taste eingestellten Zustand nicht zu speichern, wird es diese Option verwendet, statt, die auf der Seite des page_load JavaScript-Ereignis unterschiedlich verdrahtet .

6

, dass es nicht so etwas wie „ASP.NET Controls“ in der gerenderten HTML, dass der Webserver Ausgaben in Antwort auf eine Anfrage des Benutzers. Alle ASP.NET-Steuerelemente tun ist Render einige HTML in einer Weise, die alles wie erwartet auf dem Server funktioniert. Das Button-Steuerelement gibt das "onclick" -Attribut aus, um etwas JavaScript auszulösen, das dazu führt, dass die Formulardaten zurück an den Server gesendet werden (vorausgesetzt, dass alle clientseitigen Validatoren dies nicht verhindern). Der Grund für die Verwendung dieser Methode, um die Daten zurück zu senden, ist, wie ich gerade erwähnt habe, dass ein clientseitiges Skript zuerst ausgeführt werden kann, z. B. Datenvalidierungssteuerelemente, die überprüfen und feststellen können, ob erforderliche Felder vorhanden sind nicht ausgefüllt.

Grundsätzlich, außer Sie suchen, um Ihre eigenen ASP.NET-Server-Steuerelemente zu erstellen, müssen Sie sich keine Sorgen zu viel über genau das, was als ultimative Antwort von IIS ausgegeben wird. Es ist gut, mit dem, was passiert, vertraut zu sein (und ich sage nicht, dass Sie nicht genau lernen sollten, wie Server-Controls ihre Sache machen), aber Sie müssen nicht mit jedem clientseitigen Aufruf und Parameter genau vertraut sein ASP.NET macht, um zu beginnen.