2009-10-12 7 views
11

Wir haben eine Sharepoint-Lösung, die AJAX verwendet. Die Schaltfläche, die dies auslöst, befindet sich in einem Update-Fenster.So beheben Sie den Fehler: Die vom Server empfangene Nachricht konnte nicht analysiert werden

Eines der Dinge, die wir tun, ist ein MS Word-Dokument zu generieren, das dann auf dem Client geöffnet wird, damit es gedruckt werden kann.

Der Code, der das Dokument an den Client sendet sieht wie folgt aus:

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

Der Fehler, die 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 das Dokument zunächst in Sharepoint speichern könnte, und dann öffnen Sie es von Sharepoint, aber wir würden es vorziehen, dies nicht zu tun.

Antwort

17

Die Aktion, die zur Ausführung dieses Codes führt, MUSS ein Postback-Ereignis und kein AJAX-Aufruf sein.

Dies liegt an der Art der Verarbeitung von AJAX-Anfragen.

1

Klicken Sie auf die Schaltfläche, um auf eine andere Seite umzuleiten, die alle Dateien streamen kann, mit denen Sie diese Art von Sache machen möchten. Wir verwenden eine document.aspx-Seite in vielen unserer Websites und übergeben dann eine Dokument-ID über querystring und streamen die Datei von dort.

In Ihrem Beispiel Sie versuchen, im Grunde die Header für eine Seite zu ändern, die bereits angezeigt ist, die nicht

+0

'In Ihrem Beispiel sind Sie im Grunde die Header für eine Seite zu ändern versuchen, die bereits ist angezeigt, die ist nicht erlaubt. Es ist erlaubt, es ist keine separate Seite dafür nötig. –

6

Halten Sie Ihre Taste außerhalb des Update-Panel erlaubt ist. Dann funktioniert es gut.

28

Wenn Sie die Schaltfläche in updatepanel haben dies verursacht dies möglicherweise, wenn Sie nicht verschieben möchten, fügen Sie einfach einen Trigger für die Schaltfläche auf dem Updatepanel, ein Postback-Trigger.

+0

Schöne Antwort. Mein Problem ist gelöst. Danke für Ihren Vorschlag. –

+0

Mein Problem ist auch gelöst, vielen Dank !! – MBahamondes

0

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

+0

Es gibt bereits eine Lösung für diese Frage, die keine wesentlichen architektonischen Änderungen an der Anwendung erfordert. –

1

Für mich war das Problem doppelte Steuerelement-IDs in Vorlagenspalten einer Rasteransicht. Nachdem ich die Steuerelemente so umbenannt habe, dass sie netzwerkweit eindeutig sind, ist das Problem verschwunden.

1

Try-Skript-Manager in Ihre Seite zu laden hinzufügen, wie folgt aus:

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

Ich hatte eine asp: Table Kontrolle innerhalb eines asp: Update Kontrolle. Die Tabelle hatte einige statische Zeilen und einige Zeilen wurden während eines Postback-Ereignisses hinzugefügt.

Dieser Fehler ist aufgetreten, weil Zeilen und Spalten der Tabelle nicht statische IDs haben. Daher ändern sich die IDs bei jedem Postback, und dies verursacht Probleme beim Wiederherstellen von ViewState für die Tabelle.

Um diesen Fehler zu stoppen ich deaktiviert Viewstate für die Tabelle: EnableViewState = „false“

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

Verwandte Themen