Получает ошибку, когда я пишу Response.write() на событие нажатия кнопки

Sys.Webforms.PageRequestManagerParserErrorException: не удалось проанализировать сообщение, полученное с сервера. Распространенные причины этой ошибки: изменение ответа путем вызова Response.Write(), фильтров ответа, HttpModules или трассировки сервера. Подробности: Ошибка разбора рядом с '

Привет я держал кнопку в панели обновлений, и я получаю эту ошибку

3 ответа

Решение

UpdatePanel - это автоматический способ ajax, и он не может работать с Response.Write(), потому что он должен отображать в памяти то, что собирается отправить, а не проходить со страницы. Respose.Write() отправляет вывод клиенту напрямую, это как прямой вывод на страницу клиента, но без этой страницы. Поэтому Respose.Write() на updatePanel выдает исключение.

Замените Respose.Write(), вероятно, литералом, и поместите внутри литерала вывод, который вы хотели бы показать.

Вы не должны использовать Response.Write в обработчике событий для кнопки. На самом деле вы не должны использовать Response.Write() вообще, если вы не обрабатываете ВСЕ генерации ответа вручную (и тогда вы могли бы также использовать ashx вместо aspx).

Одним из обходных путей является размещение литерального элемента управления на странице, где вы хотите, чтобы ваш текст отображался, и в событии нажатия кнопки задайте значение литерала.

Более общая причина заключается в том, что некоторые брандмауэры / плагины браузера могут лишать значение заголовка HTTP, связанное с AJAX, X-MicrosoftAJAX, и, таким образом, нормальный цикл рендеринга страницы прерывается.

Подробное объяснение было доступно в блоге Telerik. Запись блога на сайте Telerik, но, похоже, из-за реорганизации компании они потеряли сервис блога (надеюсь, что временно). Итак, цитата из кеша Bing:

http://cc.bingj.com/cache.aspx?q=http%3A%2F%2Fblogs.telerik.com%2Fhristodeshev%2Fposts%2F07-06-24%2Ffirewalls_breaking_asp_net_ajax.aspx&d=4534636468308322&mkt=en-GB&setlang=en-US&w=8ZCg4pTc8CwOHTBDOYwjhsvWmFHYT0tM

Брандмауэры ломают ASP.NET AJAX! Это серьезно и может укусить вас в любое время.

Вчера Шон разместил эту проблему на наших форумах: у него и его пользователей возникали странные ошибки при запросе сайтов, основанных на ASP.NET AJAX, и да, это также означает, что RadControls основывается на Prometheus. Частичные запросы рендеринга, инициированные элементами управления UpdatePanel, завершились неудачно с загадочным сообщением:

============== Sys.WebForms.PageRequestManagerParserErrorExeption: сообщение, полученное с сервера, не может быть проанализировано. Распространенные причины этой ошибки: изменение ответа путем вызова Response.Write(), фильтров ответа, HttpModules или трассировки сервера.

включен. Подробности: Ошибка разбора рядом с '

Конечно, все это происходит без каких-либо следов Response.Write(), HttpModule, фильтра ответов или трассировки на стороне сервера в его коде. Ужас, ужас...

Имея такую ​​роскошь, как участие в команде, которая внедрила среду, похожую на ASP.NET AJAX, я заметил, что что-то заставляет ASP.NET AJAX отображать всю страницу и возвращать ее обратно в браузер, даже если предполагался код сервера обрабатывать частичный запрос рендеринга. Обратите внимание на мой акцент (жирным шрифтом является начало обычного HTML-документа):

============== Sys.WebForms.PageRequestManagerParserErrorExeption: сообщение, полученное с сервера, не может быть проанализировано. Распространенные причины этой ошибки: изменение ответа путем вызова Response.Write(), фильтров ответа, HttpModules или трассировки сервера. Подробности: Ошибка разбора возле *****'

Я считаю, что ребята из Watchguard должны довольно быстро включить заголовок X-MicrosoftAjax в свой список известных заголовков. Пока они не сделают, пожалуйста, отключите эту настройку. Я думаю, что они не единственный поставщик решений брандмауэра, который может иметь эту проблему. Вы находитесь за брандмауэром для удаления заголовков? Пожалуйста, оставьте комментарий ниже! Я имею в виду не только корпоративные решения - это могут сделать и персональные брандмауэры. Чем больше у нас список, тем больше шансов избавить кого-то от сложной проблемы.

С другой стороны, есть ли у брандмауэра веская причина для удаления заголовков HTTP-запросов? Все, что я могу придумать, это старый принцип sysadmin: "Отключите все, что не нужно вашим пользователям, а затем отключите еще немного".

Другие вопросы по тегам