How to fix error: The message received from the server could not be parsed

Asked
Viewd67580

17

We have a Sharepoint solution that uses AJAX. The button that triggers this is inside an update panel.

One of the things that we do is generate a MS Word document, that is then opened on the client so that it can be printed.

The code that sends the document to the client looks like this:

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

The error that we are getting is:

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'.

We could save the document in Sharepoint first, and then open it from Sharepoint, but we would prefer not to do this.

10 ответов

23

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

Это связано с характером обработки запросов AJAX.

6

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

4

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

  <Triggers>
<asp:PostBackTrigger ControlID="PrintButton" />
</Triggers>
 
4

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

 ((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport);
 
1

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

1

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

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

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

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

0

Я удалил панель обновлений вокруг кнопки, и все заработало.

1

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

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

34

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

0

Я боролся с этим несколько часов. Выполнение запроса ajax в моем файле WebForms Code-Behind не работало, и использование UpdatePanel привело к этой досадной ошибке, и я не смог найти решение. Наконец-то я нашел работающее решение!

  • Где-нибудь в вашем проекте создайте файл .ashx (Generic Handler). Я создал свой в папке служб верхнего уровня так: Services\EventsHandler.ashx. Когда вы сделаете это, у вас должны получиться файлы .ashx и .ashx.cs.
  • Внутри файла ashx.cs вы найдете метод ProcessRequest, в который вы можете поместить весь свой код.
  • Вы можете вызвать этот метод, выполнив в вашем файле javascript что-то подобное:

    $('#MyButton').click(function () {
        var zipCode = $('#FBZipBox').val();
    
        $.getJSON('/Services/EventsHandler.ashx?zip=' + zipCode, function (data) {
            var items = [];
            $.each(data.Results, function (key, item) {
            items.push('<span>item.Date</span>');
        });
    }).complete(function () {
        // More Logic
    });
    return false;});
    
  • В файле ashx.cs вы можете получить доступ к параметрам запроса, используя:

    var category = context.Request.QueryString ["zipCode"];

  • Затем вы можете вернуть результат, используя: