Как исправить ошибку: сообщение, полученное с сервера, не может быть проанализировано - PullRequest
13 голосов
/ 12 октября 2009

У нас есть решение Sharepoint, которое использует AJAX. Кнопка, которая вызывает это, находится внутри панели обновления.

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

Код, который отправляет документ клиенту, выглядит следующим образом:

    void OpenFileInWord(byte[] data)
    {
        Response.Clear();
        Response.AddHeader("Content-Type", "application/msword");
        Response.BinaryWrite(data);
        Response.Flush();
        Response.End();
    }

Ошибка, которую мы получаем:

Message: 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 '<?mso-application pr'.

Мы могли бы сначала сохранить документ в Sharepoint, а затем открыть его из Sharepoint, но мы бы предпочли этого не делать.

Ответы [ 9 ]

33 голосов
/ 25 ноября 2011

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

20 голосов
/ 12 октября 2009

Действие, которое вызывает выполнение этого кода, ДОЛЖНО быть событием обратной передачи, а не вызовом AJAX.

Это связано с тем, как обрабатываются запросы AJAX.

6 голосов
/ 18 ноября 2009

Держите кнопку за пределами панели обновления. Тогда все работает нормально.

3 голосов
/ 29 мая 2012

Попробуйте добавить менеджер скриптов в загрузку вашей страницы, например:

((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport);
1 голос
/ 22 октября 2018

Установите вашу кнопку, чтобы вызвать полный постбэк, как это:

 <Triggers>
<asp:PostBackTrigger ControlID="PrintButton" />
</Triggers>
1 голос
/ 19 февраля 2017

У меня был элемент управления asp: Table внутри элемента управления asp: UpdatePanel. В таблице было несколько статических строк, и некоторые строки были добавлены во время событие обратной передачи.

Эта ошибка произошла, потому что строки и столбцы таблицы не иметь статические идентификаторы. Так идентификаторы менялись при каждой обратной передаче, и это вызывает проблемы с восстановлением ViewState для таблицы.

Чтобы остановить эту ошибку, я отключил ViewState для таблицы: EnableViewState = "false"

<asp:Table ID="PageContentTable" runat="server" ... EnableViewState="false">

1 голос
/ 15 мая 2012

Для меня проблема заключалась в дублировании идентификаторов элемента управления в столбцах шаблона представления сетки. Как только я переименовал элементы управления в уникальные для всей сетки, проблема исчезла!

1 голос
/ 12 октября 2009

При нажатии кнопки перенаправьте на другую страницу, которая может передавать любые файлы, с которыми вы можете захотеть делать подобные вещи. Мы используем страницу document.aspx на многих наших сайтах, а затем передаем идентификатор документа через строку запроса и оттуда выводим файл.

В вашем примере вы в основном пытаетесь изменить заголовки для уже отображенной страницы, которая не разрешена

0 голосов
/ 15 марта 2012

Я удалил панель обновления вокруг кнопки, и она работала нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...