2008-11-14 93 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开始处理它之前以某种方式更改响应中的大小。