Как страница asp.net знает, какая кнопка инициировала обратную передачу?

Я пишу некоторый код, который подражает эффекту создания обратной передачи к странице путем выполнения точно того же веб-запроса, который был бы сгенерирован при нажатии кнопки, которая инициировала обратную передачу страницы.

Проблема состоит в том, что ответ от веб-запроса не является тем же как, что я получаю при нажатии на кнопку.

На исследовании я вижу, что даже при том, что событие Page_Load инициировано и обработано, когда я выполняю веб-запрос, обработчик для нажатия кнопки не выполняется (подразумевать, что или событие не инициировано, или это инициировано, но не обработано - я предполагаю, что это более вероятно бывший случай).

Таким образом, мой вопрос - как ASP.NET знает, какая кнопка была нажата так, чтобы это могло вызвать соответствующий обработчик?

Я думал, что это было сделано при помощи __ параметрический усилитель EVENTTARGET - я правильно установил это в органе сообщения по веб-запросу, но это не имело никакого значения.

Я посмотрел на декодируемый __ аргумент СОСТОЯНИЯ ОТОБРАЖЕНИЯ, но я не мог видеть ничего очевидного там.

Кто-либо может обеспечить дальнейшую справку?

Править: Только, чтобы быть ясным, я не спрашиваю, как добавить обработчик щелчков к веб-приложению.

Скорее я смотрю на приложение, которое уже имеет обработчик событий нажатия кнопки, и я хочу знать, как asp.net фигурирует из входящего веб-запроса что код обработчика событий нажатия кнопки вызвать.

5
задан Tola Odejayi 29 June 2010 в 05:14
поделиться

6 ответов

Хорошо, в конце концов я разобрался с этим.

Запрос должен содержать пару «имя-значение», где имя - это идентификатор нажатой кнопки, а значение может быть «1».

Что меня озадачило, так это то, что в запросе, сгенерированном при нажатии кнопки, я не увидел такой пары имя-значение. Действительно, очень странно.

Тем не менее, добавление этой пары «имя-значение» к моему созданному веб-запросу привело к срабатыванию кода обработчика событий нажатия кнопки.

0
ответ дан 14 December 2019 в 08:40
поделиться

Похоже, что на самом деле нужно опубликовать только значение __ 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>
0
ответ дан 14 December 2019 в 08:40
поделиться

Существует несколько простых способов создания обработчика событий для кнопки. В режиме компоновки дважды щелкните на кнопке. Или, также в режиме компоновки, выберите кнопку, откройте окно свойств, щелкните значок "молния" и увидите список событий, которые может вызывать элемент управления. Дважды щелкните на нужном событии.

Когда вы сделаете одно из этих действий, Visual Studio создаст обработчик события в вашем code-behind и подключит событие.

Обработчик события кнопки запускается после загрузки страницы и после проверки страницы, если вы используете валидаторы ASP.NET.

0
ответ дан 14 December 2019 в 08:40
поделиться

Я не могу ответить на ваш вопрос, но могу рассказать, как узнать.

Добавьте строчку к странице page_load: (hidden) true); (для примера).

Затем нажмите кнопку, чтобы выполнить обратную передачу.

Затем прочтите содержимое request.txt. Есть ли там что-нибудь полезное или интересное?

1
ответ дан 14 December 2019 в 08:40
поделиться

Shoko,

Обратная передача ASP.net может быть сложной задачей, но вам следует взглянуть на эту статью, используя функцию javascript __doPostBack (), чтобы получить некоторое представление.

http://www.dotnetspider.com/resources/1521-How-call-Postback-from-Javascript.aspx

HTH,

Майк

0
ответ дан 14 December 2019 в 08:40
поделиться

В вашем коде должно быть событие для обработки, и это событие должно иметь 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 сделает всю тяжелую работу за вас.

0
ответ дан 14 December 2019 в 08:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: