2008-11-14 98 views
23

我的網站在嘗試執行任何 Ajax活動時一直給我提供間歇性錯誤。我得到的消息是ASP.NET Ajax錯誤:Sys.WebForms.PageRequestManagerParserErrorException

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 ' 

<!DOCTYPE html P'. 

因此,它顯然是某種服務器超時或服務器剛剛返回破損的垃圾。這通常是,不幸的是,並不總是,發生的事情

+0

@Phil - 我注意到你標記了splattne的答案是正確的,但你在下面的評論中說過,他們都沒有應用。我有同樣的問題,也沒有任何「理由」適用於我。 你終於找到了什麼解決方案? – AdamBT 2009-08-31 19:34:10

+3

@AdamBT - 對不起,我在二月份被解僱,實際上並沒有記得我們做了什麼。對不起,我錯過了你的評論這麼久。 – 2009-09-18 12:58:06

+0

http://niharstechnicalfunda.blogspot.in/2012/03/syswebformspagerequestmanagerparsererro.html – Niks 2012-08-31 11:58:03

回答

22

有一個優秀的博客由Eilon Lipton撰寫。它含有大量的技巧就如何避免這個錯誤:

Sys.WebForms.PageRequestManagerParserErrorException - what it is and how to avoid it

閱讀評論了。有一個人有同樣問題的評論:「我解決了它在IIS上更改了我的應用程序池的服務器空閒時間。它只有5個,所以我增加了它,現在可以工作。」

「UpdatePanel控件使用異步回發來控制頁面的部分得到呈現。爲此,它使用的JavaScript客戶端上一大堆並在服務器上一大堆的C#。

異步回發是完全一樣的,除了一個重要的定期回傳:渲染異步回發經過同樣的生命週期事件作爲常規的網頁(這是一個問題,有人問我常常)

只有在。渲染階段會讓事情變得不同只顯示我們關心的UpdatePanels並使用特殊格式將其發送給客戶端。此外,我們爲這個錯誤發出一些其它信息,如網頁標題,隱藏的表單值,表單動作的URL,並列出腳本「

最常見的原因:

  1. 呼叫至的Response.Write():
  2. 響應濾波器
  3. 的HttpModules
  4. 服務器啓用跟蹤
  5. 卡爾ls以Server.Transfer的()
+0

我讀過這篇文章 - 這些都不適用。該錯誤實際上可能是母版頁中的更新面板。謝謝! – 2008-11-14 14:29:36

+0

我們軟件的用戶看到一個非常類似的錯誤。我想知道是否曾經發現過這個問題的解決方案? – 2009-02-09 06:09:42

+0

我會爲該問題添加評論。因此,下次登錄時系統會提示用戶。 – splattne 2009-02-09 07:32:42

1

我解決了這個完全相同的問題在IIS除去Content-Type:形式在HTTP Headers標籤中的Custom HTTP Headers部。這打破了頁面的編碼,並且總體上影響了Ajax。

Content-Type我在IIS中配置的是將編碼設置爲ISO-8859-1

1

這可能有點冒失,但它解決了我的問題。我沒有任何的對錯誤的常見原因,所以我只是把在頁面加載這個創可貼:

if (Session.SessionID == "") 
{ 
    Page.Session.Add("SessionID", Session.SessionID); 
} 
1

問題:Sys.WebForms。在重定向頁面時會發生PageRequestManagerParserErrorException,可以說按鈕在UpdatePanel中的aspxAjax中單擊。

解決方案:

  1. 在aspx頁面添加一個「轉到」按鈕,其更新面板使用,並將其添加外更新面板

  2. 在代碼分配烏爾剛剛註冊的用戶ID,以會話變量,說從DB Session["UseridJustregistered"]=Id或UsernameField

  3. Respose.Redirect("regSucces.aspx?urlid='" + Session["UseridJustregistered"] + "'");

  4. 檢查Session["UseridJustregistered"]爲空或不是

這是舊的經典ASP方式能夠解決我們的問題,直到微軟找到一個解決方案,我們可以解決這種方式。

9

可能在回發時發生錯誤。在這種情況下,你可以通過添加PostBackTrigger到您的UpdatePanel和引用這會導致問題的按鈕來查看有關該錯誤的詳細信息:

<asp:updatepanel ID="updatepanel1" runat="server"> 
     <Triggers> 
      <asp:PostBackTrigger ControlID="button1" /> 
     </Triggers> 
     <ContentTemplate> 

     </ContentTemplate> 
    </asp:updatepanel> 
1

我通過刪除錯誤嵌套的UpdatePanel解決了這個同樣的問題。

4

我有這種事發生在我身上,答案中的列表中沒有一個原因適用。我沒有找到問題的根源,直到我完全禁用了我的AJAX。發現代碼將一個對象保存到包含不可序列化對象的ViewState中。我讓對象可序列化,並重新開始工作。

1

我終於解決了我的同樣問題的變種。我試圖複製/移動webform中2個列表框之間的選定值。在我的情況下,我必須在第二次執行操作之前專門調用{listbox} .ClearSelection()。

很明顯,這個問題/錯誤信息可能會出於多種原因。

1

更改應用程序池從INTEGRATED到asp.net classic爲我解決了這個問題。

0

我也有這個錯誤。由「user1097991」報告的解決方案解決了它一段時間(我在視圖狀態下使用非序列化對象)

但後來錯誤再次返回,現在以隨機方式。經過一番搜索,我得到了答案:視圖狀態變得太大,被截斷。我禁用網格和菜單上的一些視圖狀態,並且問題沒有再顯示。

0

我發現我的問題與在GridView的數據綁定中呈現的nul字符有關。預期的響應長度與引發錯誤的響應文本的實際長度不匹配。一旦我將數據固定在數據庫中,我就不會再出錯了。最終的解決方案是清理RowDataBound事件期間渲染的文本。

翻遍數據庫,我看不到錯誤的數據,因爲如果字符串中包含nul字符(Char(0)),SQL Server 2008不顯示文本。在我的GridView的RowDataBound事件中,我添加了代碼來爲其中包含特殊字符的任何文本引發異常。這是我如何找到包含nul字符的記錄。

tl; dr - 檢查呈現的html中的nul個字符。

0

也請注意,這可以通過沒有正確HTML編碼你可以通過部分回發來渲染頁面造成的。

0

我有完全一樣的錯誤。

對我來說是

<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 

在web.config中的部分的HttpModules失蹤(.NET 3.5的應用程序)

這個錯誤似乎可能與許多不同的事情。

1

在我們的案例中,問題是由重寫代理程序引起的。重寫修改了更新面板響應的內容。但是這個迴應也包含原始大小。重寫機制無法知道響應的幾個字節實際上包含原始響應大小,並且它也應該被修改。

更新面板響應開始這樣的:

1|#||4|30502|updatePanel|pnlUpdate| ... 

30502是它也被更新的內容的原始大小。重寫引擎修改輸出,但大小保持不變=>解析器錯誤異常。

我不明白的方式如何克服來自客戶端的這個問題。我們需要知道如何修改內容,然後在UpdatePanel ClientScript開始處理它之前以某種方式更改響應中的大小。