Я пишу некоторый код, который подражает эффекту создания обратной передачи к странице путем выполнения точно того же веб-запроса, который был бы сгенерирован при нажатии кнопки, которая инициировала обратную передачу страницы.
Проблема состоит в том, что ответ от веб-запроса не является тем же как, что я получаю при нажатии на кнопку.
На исследовании я вижу, что даже при том, что событие Page_Load инициировано и обработано, когда я выполняю веб-запрос, обработчик для нажатия кнопки не выполняется (подразумевать, что или событие не инициировано, или это инициировано, но не обработано - я предполагаю, что это более вероятно бывший случай).
Таким образом, мой вопрос - как ASP.NET знает, какая кнопка была нажата так, чтобы это могло вызвать соответствующий обработчик?
Я думал, что это было сделано при помощи __ параметрический усилитель EVENTTARGET - я правильно установил это в органе сообщения по веб-запросу, но это не имело никакого значения.
Я посмотрел на декодируемый __ аргумент СОСТОЯНИЯ ОТОБРАЖЕНИЯ, но я не мог видеть ничего очевидного там.
Кто-либо может обеспечить дальнейшую справку?
Править: Только, чтобы быть ясным, я не спрашиваю, как добавить обработчик щелчков к веб-приложению.
Скорее я смотрю на приложение, которое уже имеет обработчик событий нажатия кнопки, и я хочу знать, как asp.net фигурирует из входящего веб-запроса что код обработчика событий нажатия кнопки вызвать.
Хорошо, в конце концов я разобрался с этим.
Запрос должен содержать пару «имя-значение», где имя - это идентификатор нажатой кнопки, а значение может быть «1».
Что меня озадачило, так это то, что в запросе, сгенерированном при нажатии кнопки, я не увидел такой пары имя-значение. Действительно, очень странно.
Тем не менее, добавление этой пары «имя-значение» к моему созданному веб-запросу привело к срабатыванию кода обработчика событий нажатия кнопки.
Похоже, что на самом деле нужно опубликовать только значение __ EVENTTARGET с идентификатором нужной кнопки щелкнуть. Вы должны установить EnableEventValidation = "false" , иначе ASP.NET выдаст ошибку. Посмотрите этот пример. Обычная html-страница, отправляет сообщения на страницу asp.net, имитируя нажатие кнопки на этой странице, что должно быть похоже на то, что вы пытаетесь сделать.
HTML-страница:
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form action="Default.aspx" method="post">
<input value="cmdSubmit" name="__EVENTTARGET" type="hidden" />
<input type="submit" value="submit" />
</form>
</body>
</html>
Страница ASP.NET с кнопкой для нажатия (Default.aspx):
<%@ Page Language="C#" EnableEventValidation="false" %>
<script runat="server">
protected void cmdSubmit_Click(object sender, EventArgs e)
{
litResult.Text = "Submit button clicked";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form id="form1" runat="server">
<asp:Literal ID="litResult" runat="server" EnableViewState="false"></asp:Literal>
<asp:Button UseSubmitBehavior="false" ID="cmdSubmit" EnableViewState="false" runat="server"
OnClick="cmdSubmit_Click" Text="Submit" />
</form>
</body>
</html>
Существует несколько простых способов создания обработчика событий для кнопки. В режиме компоновки дважды щелкните на кнопке. Или, также в режиме компоновки, выберите кнопку, откройте окно свойств, щелкните значок "молния" и увидите список событий, которые может вызывать элемент управления. Дважды щелкните на нужном событии.
Когда вы сделаете одно из этих действий, Visual Studio создаст обработчик события в вашем code-behind и подключит событие.
Обработчик события кнопки запускается после загрузки страницы и после проверки страницы, если вы используете валидаторы ASP.NET.
Я не могу ответить на ваш вопрос, но могу рассказать, как узнать.
Добавьте строчку к странице page_load: (hidden) true); (для примера).
Затем нажмите кнопку, чтобы выполнить обратную передачу.
Затем прочтите содержимое request.txt. Есть ли там что-нибудь полезное или интересное?
Shoko,
Обратная передача ASP.net может быть сложной задачей, но вам следует взглянуть на эту статью, используя функцию javascript __doPostBack (), чтобы получить некоторое представление.
http://www.dotnetspider.com/resources/1521-How-call-Postback-from-Javascript.aspx
HTH,
Майк
В вашем коде должно быть событие для обработки, и это событие должно иметь Handles ButtonName.Click
IE:
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
''# Process everything you want to process when Button2 gets clicked
End Sub
В качестве альтернативы в вашей кнопке может быть OnClick
установлен в разметке.
<asp:button ID="Button2" runat="server" OnClick="Button2_Click" Text="Click Me" />
Поскольку кнопка настроена на runat = "server"
, .NET сделает всю тяжелую работу за вас.