【问题标题】:ASP.NET Ajax Error: Sys.WebForms.PageRequestManagerParserErrorExceptionASP.NET Ajax 错误:Sys.WebForms.PageRequestManagerParserErrorException
【发布时间】:2008-11-14 13:45:46
【问题描述】:

我的网站在尝试执行任何 Ajax 活动时一直出现间歇性错误。我得到的消息是

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

所以它显然是某种服务器超时或服务器只是返回损坏的垃圾。不幸的是,这通常会发生

【问题讨论】:

  • @Phil - 我注意到你将 splattne 的答案标记为正确,但你在下面的评论中说它们都不适用。我遇到了同样的问题,也没有任何“原因”适用于我。您最终找到的解决方案是什么?
  • @AdamBT -- 抱歉,我在 2 月份从那份工作中被解雇,实际上不记得我们做了什么。对不起,我错过了你这么久的评论。

标签: javascript asp.net .net exception-handling ajax.net


【解决方案1】:

Eilon Lipton 有一篇很棒的博客文章。它包含许多关于如何避免此错误的提示:

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

也阅读 cmets。有人有同样问题的评论:“我解决了它改变我在 IIS 上的应用程序池的服务器空闲时间。它只有 5,所以我增加了它,现在可以工作了。”

“UpdatePanel 控件使用异步回发来控制页面的哪些部分被渲染。它使用客户端上的一大堆 JavaScript 和服务器上的一大堆 C# 来做到这一点。

异步回发与常规回发完全相同,除了一件重要的事情:渲染。异步回发与常规页面经历相同的生命周期事件(这是我经常被问到的问题)。

只有在渲染阶段,事情才会有所不同。我们只捕获我们关心的 UpdatePanel 的渲染,并使用特殊格式将其发送给客户端。此外,我们还会发送一些其他信息,例如页面标题、隐藏的表单值、表单操作 URL 和脚本列表。”

该错误的最常见原因:

  1. 对 Response.Write() 的调用:
  2. 响应过滤器
  3. HttpModules
  4. 服务器跟踪已启用
  5. 对 Server.Transfer() 的调用

【讨论】:

  • 我阅读了这篇文章——这些都不适用。该错误实际上可能是母版页中的更新面板。谢谢!
  • 我们软件的用户看到了一个非常相似的错误。我想知道是否找到了解决此问题的方法?
  • 我会为这个问题添加评论。所以下次登录时会提示用户。
【解决方案2】:

回发时可能发生错误。在这种情况下,您可以通过将 PostBackTrigger 添加到更新面板并引用导致问题的按钮来查看有关错误的详细信息:

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

        </ContentTemplate>
    </asp:updatepanel>

【讨论】:

  • 非常感谢。我尝试了一整天,但你的回答对我帮助很大:)
【解决方案3】:

我遇到过这种情况,答案中的列表中没有任何原因适用。直到我完全禁用了 AJAX,我才找到问题的根源。发现代码正在将一个对象保存到包含不可序列化对象的 ViewState 中。我使对象可序列化,它又开始工作了。

【讨论】:

    【解决方案4】:

    我解决了这个完全相同的问题,从IISHTTP Headers 选项卡中的Custom HTTP Headers 部分中删除了Content-Type:。这破坏了页面的编码,并且在某种程度上影响了 Ajax。

    我在IIS 中配置的Content-Type 将编码设置为ISO-8859-1

    【讨论】:

      【解决方案5】:

      这可能有点笨拙,但它为我解决了这个问题。我没有任何常见的错误原因,所以我只是在页面加载中放入了这个创可贴:

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

      【讨论】:

        【解决方案6】:

        问题:重定向页面时会发生 Sys.WebForms.PageRequestManagerParserErrorException,假设在 aspxAjax 中的 UpdatePanel 内单击按钮。

        解决方案:

        1. 在使用更新面板的 aspx 页面中添加“GoTo”按钮并将其添加到更新面板之外

        2. 在您的代码中,将您刚刚注册的用户 ID 分配给会话变量,例如来自 DB 或 UsernameField 的 Session["UseridJustregistered"]=Id

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

        4. 检查Session["UseridJustregistered"]是否为空

        这是可以解决我们问题的 OLD Classic ASP 方式,当微软找到解决方案时,我们可以通过这种方式解决它。

        【讨论】:

          【解决方案7】:

          我通过删除错误嵌套的 UpdatePanel 解决了同样的问题。

          【讨论】:

            【解决方案8】:

            我终于解决了同样问题的变体。我试图在网络表单的 2 个列表框之间复制/移动选定的值。就我而言,我必须在第二次执行该操作之前专门调用 {listbox}.ClearSelection()。

            很明显,这个问题/错误消息的出现可能有多种原因。

            【讨论】:

              【解决方案9】:

              将应用程序池从 INTEGRATED 更改为 asp.net classic 为我解决了这个问题。

              【讨论】:

                【解决方案10】:

                在我们的案例中,问题是由正在重写的代理引起的。重写修改了更新面板响应的内容。但是这个响应也包含原始大小。重写机制无法知道响应的几个字节实际上包含原始响应大小,因此也应该对其进行修改。

                更新面板响应开始如下:

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

                30502 是正在更新的内容的原始大小。重写引擎修改输出,但大小保持不变 => 解析器错误异常。

                我看不到如何从客户端解决此问题。我们需要知道内容是如何被修改的,然后在 UpdatePanel ClientScript 开始处理它之前以某种方式改变响应中的大小。

                【讨论】:

                • 你好,米尔瓦!您找到解决问题的方法了吗?
                • 嗨弗兰基。不幸的是没有。我们将此问题报告给了代理供应商,但我不知道有任何解决方案。
                • 感谢您的回复。我不得不用 devexpress 回调面板替换每个更新面板。
                • 对我来说也一样。谢谢你的提示!我想我必须适应它并尝试替换完全相同的长度。这很丑陋,但没有更好的简单方法。
                【解决方案11】:

                我也遇到了这个错误。 “user1097991”报告的解决方案解决了一段时间(我在viewstate上使用了未序列化的对象)

                但后来错误再次返回,现在以随机方式。经过一番搜索,我得到了答案:视图状态变得太大并且被截断了。我禁用了网格和菜单上的一些视图状态,问题没有再次出现。

                【讨论】:

                  【解决方案12】:

                  我发现我的问题与在 GridView 的数据绑定中呈现的 nul 字符有关。响应的预期长度与导致引发错误的响应文本的实际长度不匹配。修复数据库中的数据后,我不再收到错误消息。最终的解决方法是清理在 RowDataBound 事件期间呈现的文本。

                  查看数据库,我看不到错误数据,因为如果字符串中存在空字符 (Char(0)),SQL Server 2008 不会显示文本。在我的 GridView 的 RowDataBound 事件中,我添加了代码来为其中包含特殊字符的任何文本引发异常。这就是我找到包含 nul 字符的记录的方式。

                  tl;dr - 检查呈现的 html 中的空字符。

                  【讨论】:

                    【解决方案13】:

                    还请注意,这可能是由于未正确 html 编码您可能通过部分回发呈现到页面的内容造成的。

                    【讨论】:

                      【解决方案14】:

                      我遇到了完全相同的错误。

                      对我来说是

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

                      web.config(.Net 3.5 应用程序)的 httpModules 部分中缺少

                      这个错误似乎与许多不同的事情有关。

                      【讨论】:

                      • web.config 的哪一部分?
                      • 你好。就像我说的那样,它是 .
                      【解决方案15】:

                      将 ScriptMode 更新为“Release”

                      <asp:ScriptManager ID="ScriptManager" runat="server" ScriptMode="Release"></asp:ScriptManager>
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-11-03
                        • 2013-03-03
                        • 1970-01-01
                        • 1970-01-01
                        • 2014-09-28
                        • 2011-06-10
                        相关资源
                        最近更新 更多