Подтвердить что ты не робот

Ошибка ASP.NET Ajax: Sys.WebForms.PageRequestManagerParserErrorException

Мой веб-сайт дает мне прерывистые ошибки при попытке выполнить любые действия 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'.

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

4b9b3361

Ответ 1

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

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

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

"Элемент управления UpdatePanel использует асинхронные обратные вызовы для управления тем, какие части страницы получают рендеринг. Он делает это, используя целую кучу JavaScript на клиенте и целую кучу С# на сервере.

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

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

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

  • Вызов Response.Write():
  • Фильтры ответов
  • HttpModules
  • Трассировка сервера включена
  • Вызов на Server.Transfer()

Ответ 2

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

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

        </ContentTemplate>
    </asp:updatepanel>

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

if (Session.SessionID == "")
{
    Page.Session.Add("SessionID", Session.SessionID);
}

Ответ 6

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

Решение:

  • Добавьте кнопку "GoTo" на странице aspx, где используется панель обновления, и добавьте ее за панель "Обновление"

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

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

  • Проверьте, является ли Session["UseridJustregistered"] значение null или нет

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

Изменение пула приложений из INTEGRATED в asp.net classic решило проблему для меня.

Ответ 10

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

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

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

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

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

Ответ 11

Я также получил эту ошибку. Решение, сообщенное пользователем "user1097991", некоторое время разрешило его (я использовал объекты с не сериализованными объектами в viewstate)

Но позже ошибка снова вернулась, теперь случайным образом. После некоторого поиска я получил ответ: viewstate стал слишком большим и был усечен. Я отключил некоторые виды представлений о сетках и меню, и проблема не была показана снова.

Ответ 12

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

Просматривая базу данных, я не мог видеть плохие данные, так как SQL Server 2008 не отображает текст, если нулевой символ (Char (0)) находится в строке. В событии RowDataBound моего GridView я добавил код, чтобы создать исключение для любого текста, в котором были специальные символы. Вот как я нашел запись, содержащую нулевые символы.

tl; dr - проверьте наличие нулевых символов в отображаемом html.

Ответ 13

Также помните, что это может быть вызвано неправильной кодировкой html, которую вы можете отображать на странице с помощью частичной обратной передачи.

Ответ 14

У меня была точно такая же ошибка.

Для меня это было

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

Отсутствует раздел httpModules в файле web.config(приложение .Net 3.5)

Эта ошибка, похоже, может быть связана со многими различными вещами.

Ответ 15

Для меня работало то, что для aspnet: MaxHttpCollectionKeys было задано высокое значение в теге appSettings в файле inetpub VirtualDirectories\443\web.config:

<configuration>
    <appSettings>
        <add key="aspnet:MaxHttpCollectionKeys" value="100000" />
    </appSettings>
</configuration>