2010-07-27 2 views
0

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

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

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

Спасибо, Pawel

ответ

1

Хорошо. получил его: ввод типа = "образ" был

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

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

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

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

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

Спасибо, Paweł

+0

Я рад, что вы его нашли. То же самое случилось со мной. Сегодня я всегда избегаю использовать атрибут onclick напрямую, предпочитая вместо него привязку jquery/click. Таким образом, вы получаете согласованную модель программирования, которая не зависит от браузеров, и лучшее разделение разметки и кода JavaScript. – cjberg

1

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

+0

AutoEventWireup = «True», но почему я должен изменить его к ложной и удалить ручную проводку? – dragonfly

+0

либо имеют autowireup = true * или * удаляют ручную проводку. – TheGeekYouNeed

+0

С AutoEventWireup = «True» ASP.NET автоматически подключит обычные обработчики событий, такие как Page_Load, поэтому вам не нужно делать это вручную (он существует, чтобы помочь вам избежать такого неинтересного шаблона). Но если вы делаете это в коде, вы должны установить AutoEventWireup = «false», иначе вы закончите с обработчиками событий, зарегистрированными дважды и, соответственно, дважды. Я бы рекомендовал удалить ручную проводку, потому что менее шаблонный код имеет более удобную читаемость, что важно. – cjberg

0

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

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

+0

Эти запросы содержат те же данные формы и т. Д. Это вход, type = "image" с onclick = "__ doPostBack ...". – dragonfly