25

在尝试执行任何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'.

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

4

15 回答 15

23

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

Sys.WebForms.PageRequestManagerParserErrorException - 它是什么以及如何避免它

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

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

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

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

该错误的最常见原因:

  1. 调用 Response.Write():
  2. 响应过滤器
  3. HttpModules
  4. 服务器跟踪已启用
  5. 调用 Server.Transfer()
于 2008-11-14T13:50:29.897 回答
9

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

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

        </ContentTemplate>
    </asp:updatepanel>
于 2011-07-19T13:14:24.700 回答
4

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

于 2012-03-09T22:54:05.373 回答
1

我解决了这个完全相同的问题,删除Content-Type:了. 这破坏了页面的编码,并以某种方式影响了 Ajax。Custom HTTP HeadersHTTP HeadersIIS

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

于 2010-02-09T19:27:30.197 回答
1

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

if (Session.SessionID == "")
{
    Page.Session.Add("SessionID", Session.SessionID);
}
于 2010-05-21T17:17:39.847 回答
1

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

解决方案:

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

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

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

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

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

于 2010-08-04T08:48:31.100 回答
1

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

于 2011-12-23T16:35:18.070 回答
1

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

所以很明显,这个问题/错误消息可能由于多种原因而发生。

于 2012-07-31T22:14:40.697 回答
1

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

于 2012-08-19T10:42:42.420 回答
1

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

更新面板响应如下所示:

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

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

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

于 2015-05-28T18:53:44.710 回答
0

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

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

于 2012-09-19T00:55:23.537 回答
0

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

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

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

于 2012-11-14T16:01:17.587 回答
0

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

于 2012-12-19T21:29:33.580 回答
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 应用程序)

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

于 2015-04-14T13:45:31.653 回答
0

将 ScriptMode 更新为“Release”

<asp:ScriptManager ID="ScriptManager" runat="server" ScriptMode="Release"></asp:ScriptManager>
于 2020-07-14T10:18:55.413 回答