日期:2014-05-18  浏览次数:20495 次

ASP.net ajax应用出错 pagerequestmanagerservererrorexception 12031
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeOut="600"
  EnablePartialRendering="true">
  </asp:ScriptManager>
  <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <ContentTemplate>
  <asp:Timer ID="TimerForNew" runat="server" Interval="5000"
  OnTick="TimerForNew_Tick" Enabled="true">
  </asp:Timer>
  <asp:DataGrid>
  ..........
  </asp:DataGrid>
  </ContentTemplate>
  </asp:UpdatePanel>


程序运行一段时间后就会报Sys.WebForms.PageRequestManagerServerErrorException: An Unknown error occurred while processing the request on the server. The status code returned from the server was: 12031
这样的错,请各位我帮帮我解决下

------解决方案--------------------
1.相应Sys.Application的load事件 
Sys.Application.add_load(function() 

var form = Sys.WebForms.PageRequestManager.getInstance()._form; 
form._initialAction = form.action = window.location.href; 
}); 


这句代码要 放在Body的最后用 <script> </script>包含起来就行了 

2.在.aspx文件中加上 ValidateRequest="false"
------解决方案--------------------
发生这个问题的原因是因为Url Rewrite更新了Form提交的地址,而UpdatePanel又将这地址的改变反映到了页面上。

  在第一次打开页面时,我们可以看到页面的源文件中<form />元素的action已经不是我们访问的Source.aspx,而是Url Rewrite后的目标文件:

form元素的action为目标页面
...
<form name="form1" method="post" action="SubFolder/Target.aspx" id="form1">
...
</form>



解决问题: 

  既然发现了问题所在,那么解决起来自然也会得心应手。我们只要在响应Sys.Application的load事件即可,它会在页面第一次加载时,以及每次Partial Rendering之后被触发,我们在这时候修改页面中form元素的action属性即可,如下:

相应Sys.Application的load事件
Sys.Application.add_load(function()
{
var form = Sys.WebForms.PageRequestManager.getInstance()._form;
form._initialAction = form.action = window.location.href;
});
 
  至于为什么应该这样获得页面中的form元素,_initialAction又是什么,以及为什么要设置它,就要牵涉到UpdatePanel的实现方式,在这里就不多作解释了。只要页面中放置了这么一小段代码,这个问题就被解决了。


------解决方案--------------------
HTML code

<script language="javascript">
Sys.Application.add_load(function()
  {
  var form = Sys.WebForms.PageRequestManager.getInstance()._form;
  form._initialAction = form.action = window.location.href;
  });

</script>

------解决方案--------------------

一般的原因都是页面存在潜在的危险字符 在 页首加入 ValidateRequest="false"
也可以在 ScriptManager 内添加 EnablePartialRendering="false" 显示详细的错误信息
再检查路径或名称当中是否包含了中文.把中文改成了英文,应该不会出错了。