Sys.Webforms.PageRequestManagerParserErrorException:无法解析从服务器接收到的消息。此错误的常见原因是通过调用 Response.Write()、响应过滤器、HttpModules 或启用了服务器跟踪来修改响应。详细信息:在 ' 附近解析错误
嗨,我在更新面板中保留了按钮,我收到了这个错误
Sys.Webforms.PageRequestManagerParserErrorException:无法解析从服务器接收到的消息。此错误的常见原因是通过调用 Response.Write()、响应过滤器、HttpModules 或启用了服务器跟踪来修改响应。详细信息:在 ' 附近解析错误
嗨,我在更新面板中保留了按钮,我收到了这个错误
您不应该在按钮的事件处理程序中使用 Response.Write。真的,你根本不应该使用 Response.Write() ,除非你手动处理所有的响应生成(然后你也可以使用 ashx 而不是 aspx)。
一种解决方法是在您希望显示文本的页面上放置一个文字控件,并在按钮单击事件中设置文字的值。
updatePanel 是 ajax 的一种自动方式,不能与 Response.Write() 一起使用,因为它需要在内存上呈现要发送的内容,而不是从页面传递。Respose.Write() 直接将输出发送到客户端,就像直接输出到客户端页面一样,但没有此页面。所以 updatePanel 上的 Respose.Write() 会抛出异常。
将 Respose.Write() 替换为可能的文字,并将您想要显示的输出放在文字内。
更一般的原因是某些防火墙/浏览器插件可以去除与 AJAX 相关的 HTTP 标头值 X-MicrosoftAJAX,从而破坏了正常的页面呈现周期。
Telerik 网站上的 Telerik 博客博客文章中提供了详细解释,但似乎由于公司重组,他们失去了博客服务(希望暂时如此)。所以引用必应缓存:
破坏 ASP.NET AJAX 的防火墙!这个很严重,可能随时咬你。
昨天 Shaun 在我们的论坛上发布了这个问题:他和他的用户在请求基于 ASP.NET AJAX 的站点时遇到了奇怪的错误,是的,这意味着基于 RadControls “Prometheus”的站点也是如此。由 UpdatePanel 控件发起的部分渲染请求失败并带有神秘消息:
============== Sys.WebForms.PageRequestManagerParserErrorExeption:无法解析从服务器收到的消息。此错误的常见原因是通过调用 Response.Write()、响应过滤器、HttpModules 或服务器跟踪修改响应时
启用。详细信息:在 ' 附近解析错误当然,在他的代码中没有任何 Response.Write()、HttpModule、响应过滤器或服务器端跟踪的痕迹。恐怖,恐怖……
有幸成为实现类似于 ASP.NET AJAX 框架的团队的一员,我注意到某些东西正在使 ASP.NET AJAX 呈现整个页面并将其返回给浏览器,即使在假定服务器代码时也是如此处理部分渲染请求。注意我的重点(粗体部分是普通 HTML 文档的开头):
============== Sys.WebForms.PageRequestManagerParserErrorExeption:无法解析从服务器收到的消息。此错误的常见原因是通过调用 Response.Write()、响应过滤器、HttpModules 或启用了服务器跟踪来修改响应。详细信息:在 *****' 附近解析错误
我相信 Watchguard 的人应该很快将 X-MicrosoftAjax 标头添加到他们已知的标头列表中。在他们这样做之前,请禁用该设置。我认为他们不是唯一可能遇到此问题的防火墙解决方案提供商。您是否在标头剥离防火墙后面?请在下方发表评论!我不仅仅指企业解决方案——个人防火墙也可以做到这一点。我们拥有的清单越大,为某人解决棘手问题的机会就越大。
另一方面,防火墙是否有充分的理由剥离 HTTP 请求标头?我能想到的只是古老的系统管理员原则“禁用所有用户不需要的,然后继续禁用更多”。