Ошибка ASP.NET Ajax: Sys.WebForms.PageRequestManagerParserErrorException - PullRequest
23 голосов
/ 14 ноября 2008

Мой сайт давал мне периодические ошибки при попытке выполнить любые действия Ajax. Я получаю сообщение

Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.

Details: Error parsing near '

<!DOCTYPE html P'.

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

Ответы [ 14 ]

22 голосов
/ 14 ноября 2008

Eilon Lipton предлагает отличную запись в блоге. Он содержит множество советов о том, как избежать этой ошибки:

Sys.WebForms.PageRequestManagerParserErrorException - что это такое и как этого избежать

Читайте комментарии тоже. Есть комментарий кого-то с такой же проблемой: « Я решил это, изменив время простоя сервера моего пула приложений на IIS . Это было только 5, поэтому я увеличил его и теперь работает».

"Элемент управления UpdatePanel использует асинхронные обратные передачи для управления отображением частей страницы. Для этого используется целый набор JavaScript на клиенте и целый набор C # на сервере.

Асинхронные обратные передачи в точности совпадают с обычными обратными передачами, за исключением одной важной вещи: рендеринга. Асинхронные постбэки проходят через те же события жизненных циклов, что и обычные страницы (этот вопрос мне часто задают).

Только на этапе рендеринга все становится иначе. Мы фиксируем рендеринг только тех UpdatePanels, которые нам нужны, и отправляем их клиенту в специальном формате. Кроме того, мы отправляем некоторые другие сведения, такие как заголовок страницы, скрытые значения формы, URL-адрес действия формы и списки сценариев. "

Наиболее распространенные причины этой ошибки:

  1. Вызовы Response.Write ():
  2. Фильтры ответов
  3. HttpModules
  4. Включена трассировка сервера
  5. Звонки на Server.Transfer ()
9 голосов
/ 19 июля 2011

Возможно, произошла ошибка при отправке сообщения назад. В этом случае вы можете просмотреть подробную информацию об ошибке, добавив PostBackTrigger в панель обновлений и нажав кнопку, вызывающую проблему:

    <asp:updatepanel ID="updatepanel1" runat="server">
        <Triggers>
            <asp:PostBackTrigger ControlID="button1" /> 
        </Triggers>
        <ContentTemplate>

        </ContentTemplate>
    </asp:updatepanel>
4 голосов
/ 10 марта 2012

У меня было такое со мной, и ни одна из причин в списке в ответе не применялась. Я не нашел корень проблемы, пока полностью не отключил свой AJAX. Обнаружено, что код сохраняет объект в ViewState, который содержит не сериализуемый объект. Я сделал объект сериализуемым, и он снова начал работать.

1 голос
/ 28 мая 2015

В нашем случае проблема была вызвана переписыванием прокси в пути. Перезапись изменила содержимое ответа панели обновления. Но этот ответ также содержит оригинальный размер. Механизм перезаписи не может знать, что несколько байтов ответа фактически содержат исходный размер ответа, и его также следует изменить.

Ответ панели обновления начинается следующим образом:

1|#||4|30502|updatePanel|pnlUpdate| ...

30502 - это оригинальный размер обновляемого контента. Механизм перезаписи изменяет вывод, но размер остается неизменным => исключение ошибки синтаксического анализатора.

Я не вижу способа, как преодолеть эту проблему со стороны клиента. Нам нужно знать, как именно был изменен контент, а затем каким-то образом изменить размер ответа, прежде чем UpdatePanel ClientScript начнет его обрабатывать.

1 голос
/ 19 августа 2012

Смена пула приложений с INTEGRATED на asp.net classic решила эту проблему для меня.

1 голос
/ 01 августа 2012

Я наконец решил свой вариант этой же проблемы. Я пытался скопировать / переместить выбранное значение между двумя списками в веб-форме. В моем случае мне пришлось специально вызывать {listbox} .ClearSelection () до выполнения действия во второй раз.

Таким образом, очевидно, что эта проблема / сообщение об ошибке может появиться по множеству причин.

1 голос
/ 23 декабря 2011

Я решил эту же проблему, удалив ошибочно вложенные UpdatePanels.

1 голос
/ 04 августа 2010

Проблема: Sys.WebForms.PageRequestManagerParserErrorException возникнет при перенаправлении вашей страницы, скажем, нажатие кнопки внутри UpdatePanel в aspxAjax.

Решение:

  1. Добавьте кнопку «Перейти» на странице aspx, где используется панель обновления, и добавьте ее за пределами панели обновления

  2. В вашем коде назначьте только что зарегистрированный userID переменной сеанса, скажем Session["UseridJustregistered"]=Id из DB или UsernameField

  3. Respose.Redirect("regSucces.aspx?urlid='" + Session["UseridJustregistered"] + "'");

  4. Проверьте, является ли Session["UseridJustregistered"] нулевым или нет

Это OLD Classic ASP, который может решить нашу проблему, к тому времени, когда Microsoft найдет решение, мы сможем решить его таким образом.

1 голос
/ 21 мая 2010

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

if (Session.SessionID == "")
{
    Page.Session.Add("SessionID", Session.SessionID);
}
1 голос
/ 09 февраля 2010

Я решил ту же самую проблему, удалив Content-Type: из раздела Custom HTTP Headers на вкладке HTTP Headers в IIS. Это нарушало кодировку страницы и как-то влияло на Ajax в целом.

Content-Type, который я настроил в IIS, устанавливал кодировку на ISO-8859-1.

...