web-dev-qa-db-de.com

Fehlerbehebung: Die vom Server empfangene Nachricht konnte nicht analysiert werden

Wir haben eine Sharepoint-Lösung, die AJAX verwendet. Die Schaltfläche, die dies auslöst, befindet sich in einem Aktualisierungsfenster.

Unter anderem generieren wir ein MS Word-Dokument, das auf dem Client geöffnet wird, damit es gedruckt werden kann.

Der Code, der das Dokument an den Client sendet, sieht folgendermaßen aus:

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

Der Fehler, den wir bekommen, ist:

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

Wir könnten das Dokument zuerst in Sharepoint speichern und dann von Sharepoint aus öffnen, aber wir möchten dies lieber nicht tun.

13
Shiraz Bhaiji

Die Aktion, die dazu führt, dass dieser Code ausgeführt wird, MUSS ein Postback-Ereignis und kein Aufruf von AJAX sein.

Dies liegt an der Art und Weise, wie AJAX-Anforderungen verarbeitet werden.

19
Mitchel Sellers

Wenn Sie die Schaltfläche im Updatepanel haben, kann dies möglicherweise dazu führen. Wenn Sie sie nicht verschieben möchten, fügen Sie einfach einen Auslöser für die Schaltfläche im Updatepanel hinzu, einen Postback-Auslöser.

33
MauricioMCP

Halten Sie Ihre Schaltfläche außerhalb des Update-Bereichs. Dann funktioniert es gut.

6
Madhu

Fügen Sie den Skript-Manager wie folgt hinzu:

((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl(btnExport);
2
Manick

Stellen Sie Ihren Button so ein, dass er ein vollständiges Postback bewirkt:

 <Triggers>
<asp:PostBackTrigger ControlID="PrintButton" />
</Triggers>
1
Masoume Karvar

Ich hatte ein asp: Table-Steuerelement in einem asp: UpdatePanel-Steuerelement. Die Tabelle hatte einige statische Zeilen und einige Zeilen wurden während eines Postback-Ereignisses Hinzugefügt.

Dieser Fehler trat auf, weil Zeilen und Spalten der Tabelle Keine statischen IDs hatten. Die IDs haben sich also bei jedem Postback geändert und dies verursacht Probleme bei der Wiederherstellung von ViewState für die Tabelle.

Um diesen Fehler zu stoppen, habe ich ViewState für die Tabelle deaktiviert: EnableViewState = "false"

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

1

Klicken Sie auf der Schaltfläche auf, um zu einer anderen Seite umzuleiten, auf der alle Dateien gestreamt werden können, mit denen Sie diese Art von Vorgang ausführen möchten. Wir verwenden eine document.aspx-Seite in vielen unserer Websites, übergeben dann eine Dokument-ID über Querzeichenfolge und streamen die Datei von dort aus.

In Ihrem Beispiel versuchen Sie grundsätzlich, die Kopfzeilen einer bereits angezeigten Seite zu ändern, die nicht zulässig ist

1
Anthony Shaw

Für mich bestand das Problem in doppelten Steuerelement-IDs in Vorlagenspalten einer Rasteransicht. Sobald ich die Steuerelemente umbenannt habe, um gitterweit eindeutig zu sein, ist das Problem verschwunden!

1
Dave de Jong

Ich habe das Update-Panel um die Schaltfläche entfernt und es hat gut funktioniert.

0
Daya

Ich habe ein paar Stunden damit zu kämpfen. Ausführen einer Ajax-Anforderung in meinen WebForms Code-Behind Datei funktionierte nicht & die Verwendung eines UpdatePanel führte zu diesem ärgerlichen Fehler und ich konnte keine Lösung finden. Endlich habe ich eine Lösung gefunden, die funktioniert!

  • Erstellen Sie irgendwo in Ihrem Projekt ein .ashx (Generic Handler) -Datei. Ich habe meine in einem Top Level Services-Ordner erstellt, also: Services\EventsHandler.ashx. Wenn Sie dies tun, sollten Sie am Ende ein .ashx & .ashx.cs Datei.
  • In der ashx.cs Datei finden Sie eine ProcessRequest Methode, mit der Sie Ihren gesamten Code einfügen können.
  • Sie können diese Methode aufrufen, indem Sie in Ihrer Javascript-Datei Folgendes ausführen:

    $('#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;});
    
  • In deinem ashx.cs Datei können Sie auf die Abfrageparameter zugreifen mit:

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

  • Sie können das Ergebnis dann zurückgeben mit:

    context.Response.Write (yourResponseString);

0
Versatile