Ответ 1
Вот полное решение
Тег всей формы страницы 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 включена, чтобы гарантировать, что функция javascript __doPostBack будет передана клиенту. Простое управление Button не приведет к отображению этой функции __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();
}
}
- Как вы можете видеть, он присваивает значения скрытым входам.
Когда появляется форма отправки/обратной передачи:
- Если вы предоставили уникальный идентификатор кнопки Server-Control, чей щелчок-клик-обработчик вы хотите запустить (
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, если вы хотите его
- Если недопустимо устанавливать