Ось повне рішення
Повний тег форми сторінки asp.net
<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>
Весь зміст класу сторінки поза кодом
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
- Включено LinkButton, щоб переконатися, що функція __doPostBack javascript надається клієнту. Просто наявність кнопок управління не призведе до відображення цієї функції __doPostBack. Ця функція відображатиметься завдяки наявності різноманітних елементів керування на більшості сторінок ASP.NET, тому порожня кнопка посилання зазвичай не потрібна
Що відбувається?
Клієнту відображаються два елементи керування введенням:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
__EVENTTARGET
отримує аргумент 1 з __doPostBack
__EVENTARGUMENT
отримує аргумент 2 з __doPostBack
Функція __doPostBack відображається так:
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
- Як бачите, він призначає значення прихованим входам.
Коли форма подається / повертається:
- Якщо ви надали унікальний ідентифікатор кнопки керування сервером, чий обробник клацання кнопки ви хочете запустити (
javascript:__doPostBack('ButtonB','')
, тоді буде запущений обробник натискання кнопки для цієї кнопки.
Що робити, якщо я не хочу запускати обробник клацань, а хочу замість цього зробити щось інше?
Ви можете передати все, що хочете, як аргументи __doPostBack
Потім ви можете проаналізувати приховані вхідні значення і відповідно запустити конкретний код:
If Request.Form("__EVENTTARGET") = "DoSomethingElse" Then
Response.Write("Do Something else")
End If
Інші примітки
- Що робити, якщо я не знаю ідентифікатора елемента керування, чий обробник клацань я хочу запустити?
- Якщо це не прийнятно для набору
ClientIDMode="Static"
, то ви можете зробити що - щось на зразок цього: __doPostBack('<%= myclientid.UniqueID %>', '')
.
- Або:
__doPostBack('<%= MYBUTTON.UniqueID %>','')
- Це вкаже унікальний ідентифікатор елемента керування в javascript, якщо ви цього забажаєте