Найдите место, которое отправляет форму в ASP .NET

У меня есть форма на странице ASP .NET с событием onclick кнопки, прикрепленным к функции doPostBack. Однако, когда я нажимаю эту кнопку, форма отправляется дважды. Отладчик на стороне сервера дважды входит в Page_Load, Fiddler записывает два aspx-запроса и т. Д., Нет 302 редиректа и т. Д., Это довольно простая страница.

Когда я устанавливаю точку останова в функции __doPostBack, она также вызывается один раз (возможно, это просто иллюзия).

Есть ли шанс еще глубже отладить клиентскую сторону, чтобы найти проблему?

Спасибо, Павел


person dragonfly    schedule 27.07.2010    source источник


Ответы (3)


Вы подключаете обработчики событий вручную? Если это так, вы должны проверить, если AutoEventWireup = "true" в директиве страницы ASPX. Если да, измените его на false или удалите проводку вручную. Это может произойти, когда вы обновляете старую страницу до нового формата веб-приложения с помощью файла дизайнера.

person cjberg    schedule 27.07.2010
comment
AutoEventWireup = True, но почему я должен изменить его на false и удалить ручную проводку? - person dragonfly; 27.07.2010
comment
Если AutoEventWireup = True, ASP.NET автоматически подключает стандартные обработчики событий, такие как Page_Load, поэтому вам не нужно делать это вручную (он существует, чтобы помочь вам избежать такого неинтересного шаблонного кода). Но если вы делаете это в коде, вы должны установить AutoEventWireup = false, иначе вы получите обработчики событий, зарегистрированные дважды и, следовательно, вызываемые дважды. Я бы рекомендовал удалить ручную проводку, потому что меньше шаблонного кода означает лучшую читаемость, что важно. - person cjberg; 27.07.2010
comment
Вот вопрос об AutoEventWireup с ответами, объясняющими, как это работает: stackoverflow.com/questions/680878/ - person cjberg; 27.07.2010
comment
Причина, по которой я спросил об этом, заключается в том, что это не решит мою проблему, а именно: ДВА ЗАПРОСА ОТПРАВЛЯЮТСЯ ИЗ БРАУЗЕРА :) и дважды вызвать Page_Load - это всего лишь следствие. Спасибо - person dragonfly; 28.07.2010

В порядке. понял: input type = "image" имел

onclick="__doPostBack(.....)" 

Когда я изменил его на:

onclick="_doPostBack(...); return false;"

и проблема с двумя запросами исчезла. Fiddler записал только один запрос, Page_Load вызывается один раз, и все в порядке.

Поэтому будьте осторожны при использовании HTML-элементов, которые вызывают автоматическую отправку формы при нажатии;)

Спасибо, Павел

person dragonfly    schedule 28.07.2010
comment
Я рада, что ты это нашел. То же самое случилось и со мной. Сегодня я всегда избегаю использования атрибута onclick напрямую, отдавая предпочтение bind / click jquery. Таким образом вы получаете согласованную модель программирования, которая не отличается в зависимости от браузера, и лучшее разделение разметки и кода JavaScript. - person cjberg; 30.07.2010

Похоже, обратную передачу вызывают две причины. Кнопка является кнопкой отправки, а также имеет обработчик onclick? Это могло бы вызвать такое поведение.

Два запроса ASPX, которые вы видите в Fiddler, одинаковы или немного отличаются?

person davisoa    schedule 27.07.2010
comment
Эти запросы содержат те же данные формы и т. Д. Это input, type = image с onclick = __ doPostBack .... - person dragonfly; 27.07.2010