2009-10-12 113 views
11

我們有一個使用AJAX的Sharepoint解決方案。觸發它的按鈕位於更新面板內。如何解決錯誤:無法解析從服務器收到的消息

我們所做的一件事就是生成一個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打開它,但我們不希望這樣做。

回答

17

導致此代碼執行的操作必須是回發事件,而不是AJAX調用。

這是由於處理AJAX請求的方式的性質。

1

在您的按鈕上單擊,重定向到另一個頁面,該頁面可以流式傳輸您可能想要執行此類操作的任何文件。我們在許多站點中使用document.aspx頁面,然後通過querystring傳遞文檔ID並從那裏傳輸文件。

在你的榜樣,你基本上試圖改變標題爲已在被顯示的頁面這是不允許的

+0

'在你的榜樣,你基本上試圖改變標題爲包括已經顯示一個網頁,其中不允許「。這是允許的,不需要一個單獨的頁面。 – 2012-12-28 07:17:05

6

讓您的按鈕更新面板之外。然後它工作正常。

28

如果你在updatepanel中有按鈕,這可能會導致這種情況,如果不想移動它,只需在updatepanel上添加一個按鈕觸發器,一個回發觸發器。

+0

很好的答案。我的問題得到解決。感謝您的建議。 – 2013-01-20 05:52:31

+0

我的問題也解決了,非常感謝! – MBahamondes 2015-12-17 13:27:17

0

我刪除了按鈕周圍的更新面板,它工作正常。

+0

這個問題已經有了一個解決方案,不需要對應用程序進行任何重大的體系結構更改。 – 2012-10-28 17:41:04

1

對我來說問題是在網格視圖的模板列中出現重複控件ID。一旦我將控件重新命名爲獨特的網格,問題就消失了!

1

嘗試增加腳本管理器在你的頁面加載,這樣的:

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

我有一個asp:UpdatePanel控件:一個asp內表的控制。 該表有一些靜態行,並在 回發事件期間添加了一些行。

發生此錯誤是因爲表的行和列沒有 具有靜態ID。因此ID在每次回發時都會更改,這會導致爲表恢復ViewState的問題 。

爲了制止這種錯誤我的表禁用ViewState的:的EnableViewState =「假」

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

相關問題