Кнопка Отправить периодически ничего не делает в Chrome - PullRequest
2 голосов
/ 11 октября 2011

У меня есть UserControl с панелью обновления. На панели обновлений есть DropDownList. При изменении раздела загружается DataList, и кнопка отправки становится видимой. Кнопка отправки отлично работает в IE и FireFox, но в Chrome она, кажется, периодически ничего не делает (то есть, во многих случаях она отлично работает в Chrome). Если это не работает, шаблон asp.net ajax UpdateProgress для панели обновлений не отображается и не отправляет сообщения обратно на сервер. UpdatePanel имеет ChildrenAsTriggers = true, а кнопка является дочерней. Кнопка включена, и я не получаю никаких ошибок сценария в консоли инструментов разработчика Chrome. Я также не получаю никаких исключений на стороне сервера в любой момент. К кнопке не привязан пользовательский JavaScript-код:

<asp:Button ID="btnContinue" runat="server" Text="" CssClass="btn_continue" OnClick="btnCheckOut_Click" />

Как я могу дополнительно отлаживать, что происходит (или не происходит), когда я нажимаю кнопку?

Редактировать: Вот новая информация:

1) Когда возникает проблема, никакие последующие постбэки не работают. Я выбираю элемент из выпадающего списка, он отправляет обратно асинхронно, и затем ни кнопка, ни изменение выбора из выпадающего списка снова не вызывают обратную передачу.

2) Я обнаружил, что, когда у меня возникает проблема, я могу перейти в Инструменты> Очистить данные просмотра и выбрать только «Очистить кэш» и очистить его, затем перезагрузить страницу, и проблема исчезнет. Я не могу воспроизвести его, пока я не выйду и не вернусь на страницу. Так что похоже, что он связан с кешем .

3) Кажется, что несколько постбэков работают нормально без UpdatePanel .

Edit2: Это работает в SharePoint 2007, что, очевидно, является важным фактором. Главная страница использует скрипт Sharepoint INIT.JS в своем теле OnLoad и формирует события OnSubmit для выполнения каких-то задач. Единственное, что он делает, - устанавливает флаг, указывающий, была ли отправлена ​​форма, и устанавливает для него значение false в OnLoad. Функция OnLoad также в основном обходит этот процесс для обратных передач ajax. Проблема заключается в том, что Chrome не выполняет событие OnLoad, поэтому процесс не обходит, флаг никогда не возвращается в ложное состояние, а последующие отправки запрещаются функцией OnSubmit. У меня есть тема, исследующая эту проблему здесь: http://social.msdn.microsoft.com/Forums/en-ca/sharepointgeneral/thread/97ff77d1-31d4-45ff-af6e-524416cdff1c

Ответы [ 2 ]

0 голосов
/ 13 октября 2011

Вы можете решить проблему дальше, используя встроенные инструменты разработчика Chrome. Хотя форма не публикуется, на стороне клиента выполняется скрипт. Нажмите кнопку гаечного ключа> Инструменты> Инструменты разработчика или нажмите Ctrl + Shift + I. Используйте вкладку «Сценарий» для отладки JavaScript. Хотя кнопка может не иметь никакого связанного с ней javascript, форма может иметь сценарий OnSubmit. Вы можете установить точку останова на этом скрипте. Поскольку автоматическая обратная передача DropDownList также не работала, вы можете установить точки останова для события OnChanged. Менеджер сценариев ajax автоматически вставляет сценарий setTimeout в событие OnChanged, поэтому один из способов его обнаружения - выбрать расширитель точек останова прослушивателя событий в правой части панели сценариев, развернуть таймер и проверить событие Timer Fired. Или вы можете найти в файле (ах) ScriptResource.axd функцию Sys $ WebForms $ PageRequestManager $ _doPostBack (eventTarget, eventArgument) и установить там точку останова, но для этого может потребоваться следующий шаг ...

Сломать это одно, а иметь читаемый скрипт - другое. Ajax-скрипты не очень полезны по умолчанию, но если вы измените web.config вашего сайта, чтобы использовать

<compilation Debug="true">.

Это загрузит более читаемую отладочную версию сценариев ajax, через которую вы можете пройти.

0 голосов
/ 11 октября 2011

Я всегда рекомендую Fiddler для отладки http-трафика.

...