最近需要用timer局部刷新label,是用.NET 2008的AJAX 扩展的ScriptManagerScriptManager,Timer控件,结果在运行的时候就出现异常:

    Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManagerParserErrorException: 无法分析从服务器收到的消息。之所以出现此错误,常见的原因是: 在通过调用 Response.Write() 修改响应时,将启用响应筛选器、HttpModule 或服务器跟踪。详细信息: 分析附近的“已登录102|updatePanel|U”时出错。

  无解就到网上看了很多资料,一大堆的鸡肠不大好理解,看了很久,有提到说要去掉Response.Write这样的语句,而且在错误信息上详细信息说了“已登录102|updatePanel|U”时出错“,尝试去掉Response.Write,就没有发生异常了。

 

 

下面是在网上搜到的一人兄的解释:

 

UpdatePanel 與 Sys.WebForms.PageRequestManagerParserErrorException

朋友問:「為什麼程式加了 ScriptManager 和 UpdatePanel 之後,原本沒問題的程式,卻出現 Sys.WebForms.PageRequestManagerParserErrorException?」

Eilon Lipton 有篇文章提供了很詳細的說明,包括該錯誤的意義、發生原因、以及解決方法:Sys.WebForms.PageRequestManagerParserErrorException - what it is and how to avoid it

常見的原因包括:
  • 在程式中呼叫 Response.Write 輸出資料至用戶端頁面。這會導致 UpdatePanel 無法對這些資料編碼。
  • 網站有使用 response filter。
  • 網站有使用 HTTP modules。
  • 開啟網頁的 trace 功能。
  • 在程式中呼叫 Server.Transfer。
  • 那位朋友碰到的情況,是程式中使用 Server.Transfer 的方式轉址。改成 Response.Redirect 就解決了。