Простой ответ:__doPostBack
функции JavaScript вызываются на основе конкретного <asp />
управления и событий, которые он обрабатывает.
Детальный ответ: Это зависит.
Во-первых, давайте рассмотрим ваш пример. У вас есть <asp:Button />
, который отображается как стандарт <input type="submit" />
. Все в ASP.NET WebForms вращается вокруг стандартного тега HTML <form>
. HTML <form>
отправлен без использование или оказание помощи JavaScript, нажав кнопку <input type="submit" />
кнопка.
Имея это в виду, вы можете очень хорошо видеть (что вы уже заметили), что оказанная <input type="submit" />
кнопка делает не имеют onclick
событие назначено. И, как вы можете видеть, форма отправляется при нажатии кнопки.
Когда дело доходит до того, как код back end (C#/VB.NET/etc.) Выполняется при нажатии кнопки <input type="submit" />
: все это обрабатывается самой ASP.NET Framework и выходит за рамки этот вопрос/ответ.
Во-вторых, теперь давайте рассмотрим, что __doPostBack
, и как она используется.__doPostBack
- это просто вспомогательная функция JavaScript, используемая для отправки HTML <form>
. По причинам, указанным выше, вы теперь знаете, почему кнопка <input type="submit" />
делает не необходимо вызвать функцию __doPostBack
.
Для простоты, давайте взглянем на странице ASP.NET, который имеет <asp:DropDownList />
контроль, и он имеет обработчик события SelectedIndexChanged
назначенную:
<asp:DropDownList ID="MyDropDownList" AutoPostBack="true" OnSelectedIndexChanged="MyDropDownList_SelectedIndexChanged" runat="server" />
<asp:DropDownList />
визуализируется следующим образом:
<select id="ctl00_MyDropDownList" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MyDropDownList\',\'\')', 0)" name="ctl00$MyDropDownList"></select>
Давайте проигнорируем функцию setTimeout
в событии onchange
- это просто хакерское обходное решение, используемое ASP.NET - и давайте сосредоточимся n функция __doPostBack
внутри.
Как вы можете видеть здесь, то __doPostBack
функция является вызывается обработчиком onchange
событий. Основное различие заключается в том, что изменение значения <asp:DropDownList />
или <select />
управления не заставляет браузер отправлять форму!
В очередной раз ASP.NET Framework внутренне выполняет то, как выполняется обратный код при отправке формы (через функцию __doPostBack
или нет).
Наконец, как и для деталей __doPostBack
: она принимает два параметра - eventTarget
и eventArgument
. eventTarget
содержит отображаемое свойство HTML id
элемента управления, которое вызывает обратную передачу; и eventArgument
- необязательный параметр, который может использоваться для передачи дополнительных данных в код конца.
Редактировать Дополнительная информация: ОП задал очень интересный вопрос - что происходит, когда есть больше чем одна кнопка отправки?
Ну, во время операции POST
браузеры включают value
<input type="submit" />
, которые вызвали операцию для инициирования.
Это означает, что так же, как вы получаете значения своих <input />
элементов, вы также можете запросить, какая кнопка вызвала отправку!
Покажите нам свой код –
_ «после рендеринга в браузере» _ Я думаю, вы вводите в заблуждение код сервера и клиента. –
Я думаю, вы должны прочитать это http://support.microsoft.com/kb/306459, в котором описаны элементы управления сайтами Web Forms. По сути, postbacks выполняются с помощью javascript, скрытые поля __EVENTTARGET и __VIEWSTATE содержат информацию о том, что было нажато, и данные на странице соответственно.Вызывается сценарий __EVENTTARGET и т. Д., И вызывается соответствующий обработчик событий на стороне сервера. – bUKaneer