Sys.WebForms.PageRequestManagerServerErrorException(status code 500 OR 12031)
我們只要在響應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的實現方式,在這里就不多作解釋了。只要頁面中放置了這么一小段代碼,這個問題就被解決了。
??
??
??
??深入問題:
??
?? 造成這個問題的原因,其實就是因為在Url Rewrite之后,form元素的action并非客戶端請求的地址,而是Url Rewrite的目標地址。如果我們沒有使用Partial Rendering,而是使用了最傳統的PostBack,雖然不會造成頁面功能的破壞,但是在PostBack之后,用戶就會發現地址欄的內容變了,直接變成了目標地址。這可不是我們希望看到的結果,既然Rewrite了,就把它Rewrite到底。當然,我們依然可以使用上面提到的辦法,使用JavaScript來修改form元素的action,但是這個做法實在不夠“美觀大方”,而且用戶從HTML源文件中也可以看到我們Url Rewrite的目標地址,不是嗎?
??
?? 如果我們能夠在服務器端設置Form的action就好了,可惜System.Web.UI.HTMLControls.HTMLForm類不允許我們這么做。不過還好,我們用的是ASP.NET,我們用的是面向對象的編程模型。于是我們“繼承”System.Web.UI.HTMLControls.HTMLForm,實現一個自己的Form控件:
??
??繼承HTMLForm類實現自己的From
??namespace ActionlessForm {
?? public class Form : System.Web.UI.HTMLControls.HTMLForm
?? {
?? protected override void RenderAttributes(HTMLTextWriter writer)
?? {
?? writer.WriteAttribute("name", this.Name);
?? base.Attributes.Remove("name");
?? writer.WriteAttribute("method", this.Method);
?? base.Attributes.Remove("method");
?? this.Attributes.Render(writer);
?? base.Attributes.Remove("action");
?? if (base.ID != null)
?? writer.WriteAttribute("id", base.ClientID);
?? }
?? }
??}
???
??
?? 然后我們就可以在頁面中使用它了。當然,在這之前,我們需要在頁面(或Web.config)里注冊它:
??
??使用我們自己實現的Form
??<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
?? Assembly="ActionlessForm" %>
??...
??<skm:Form id="Form1" method="post" runat="server">
??...
??</skm:Form>
??
?? 至此,我們已經不需要在頁面里編寫一段“巧妙”的JavaScript了,Url Rewrite之后form元素的action問題被解決了。
?
=======================================
問題描述:
一個頁面有兩次無刷新提交操作就出錯了Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server.The status codereturnded from the server was:12031
解決:
在頁面上加了上面那段 JS 就解決問題了,呵呵~~
<script language="javascript">
Sys.Application.add_load(function()
??? {
??????? var form = Sys.WebForms.PageRequestManager.getInstance()._form;
??????? form._initialAction = form.action = window.location.href;
??? });
</script>
轉載于:https://www.cnblogs.com/China-Dragon/archive/2009/05/12/1455099.html
總結
以上是生活随笔為你收集整理的Sys.WebForms.PageRequestManagerServerErrorException(status code 500 OR 12031)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ruby watir 登陆邮箱
- 下一篇: Jquery json的超强组合