Hier ist eine Komplettlösung
Gesamtes Formular-Tag der asp.net-Seite
<form id="form1" runat="server">
<asp:LinkButton ID="LinkButton1" runat="server" /> <%-- included to force __doPostBack javascript function to be rendered --%>
<input type="button" id="Button45" name="Button45" onclick="javascript:__doPostBack('ButtonA','')" value="clicking this will run ButtonA.Click Event Handler" /><br /><br />
<input type="button" id="Button46" name="Button46" onclick="javascript:__doPostBack('ButtonB','')" value="clicking this will run ButtonB.Click Event Handler" /><br /><br />
<asp:Button runat="server" ID="ButtonA" ClientIDMode="Static" Text="ButtonA" /><br /><br />
<asp:Button runat="server" ID="ButtonB" ClientIDMode="Static" Text="ButtonB" />
</form>
Gesamter Inhalt der Code-Behind-Klasse der Seite
Private Sub ButtonA_Click(sender As Object, e As System.EventArgs) Handles ButtonA.Click
Response.Write("You ran the ButtonA click event")
End Sub
Private Sub ButtonB_Click(sender As Object, e As System.EventArgs) Handles ButtonB.Click
Response.Write("You ran the ButtonB click event")
End Sub
- Der LinkButton ist enthalten, um sicherzustellen, dass die Javascript-Funktion __doPostBack für den Client gerendert wird. Wenn Sie nur Button-Steuerelemente haben, wird diese __doPostBack-Funktion nicht gerendert. Diese Funktion wird aufgrund einer Vielzahl von Steuerelementen auf den meisten ASP.NET-Seiten gerendert, sodass normalerweise keine leere Linkschaltfläche erforderlich ist
Was ist los?
Für den Client werden zwei Eingabesteuerelemente gerendert:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
__EVENTTARGET
erhält Argument 1 von __doPostBack
__EVENTARGUMENT
erhält Argument 2 von __doPostBack
Die __doPostBack-Funktion wird folgendermaßen gerendert:
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
- Wie Sie sehen können, werden die Werte den versteckten Eingaben zugewiesen.
Wenn das Formular gesendet / zurückgesendet wird:
- Wenn Sie die UniqueID der Server-Steuerungsschaltfläche angegeben haben, deren Schaltflächenklick-Handler Sie ausführen möchten (
javascript:__doPostBack('ButtonB','')
dann wird der Schaltflächenklick-Handler für diese Schaltfläche ausgeführt.
Was ist, wenn ich keinen Klick-Handler ausführen möchte, sondern stattdessen etwas anderes tun möchte?
Sie können alles, was Sie wollen, als Argumente übergeben __doPostBack
Sie können dann die versteckten Eingabewerte analysieren und spezifischen Code entsprechend ausführen:
If Request.Form("__EVENTTARGET") = "DoSomethingElse" Then
Response.Write("Do Something else")
End If
Weitere Hinweise
- Was ist, wenn ich die ID des Steuerelements nicht kenne, dessen Klick-Handler ich ausführen möchte?
- Wenn das Einstellen nicht akzeptabel ist
ClientIDMode="Static"
, können Sie Folgendes tun : __doPostBack('<%= myclientid.UniqueID %>', '')
.
- Oder:
__doPostBack('<%= MYBUTTON.UniqueID %>','')
- Dadurch wird die eindeutige ID des Steuerelements in das Javascript eingefügt, falls Sie dies wünschen