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" 显示详细的错误信息
再检查路径或名称当中是否包含了中文.把中文改成了英文,应该不会出错了。