Sys.WebForms.PageRequestManagerServerErrorException(status code 500 OR 12031)
我們只要在響應(yīng)Sys.Application的load事件即可,它會(huì)在頁(yè)面第一次加載時(shí),以及每次Partial Rendering之后被觸發(fā),我們?cè)谶@時(shí)候修改頁(yè)面中form元素的action屬性即可,如下:
??
??相應(yīng)Sys.Application的load事件
??Sys.Application.add_load(function()
??{
?? var form = Sys.WebForms.PageRequestManager.getInstance()._form;
?? form._initialAction = form.action = window.location.href;
??});
??
?? 至于為什么應(yīng)該這樣獲得頁(yè)面中的form元素,_initialAction又是什么,以及為什么要設(shè)置它,就要牽涉到UpdatePanel的實(shí)現(xiàn)方式,在這里就不多作解釋了。只要頁(yè)面中放置了這么一小段代碼,這個(gè)問(wèn)題就被解決了。
??
??
??
??深入問(wèn)題:
??
?? 造成這個(gè)問(wèn)題的原因,其實(shí)就是因?yàn)樵赨rl Rewrite之后,form元素的action并非客戶(hù)端請(qǐng)求的地址,而是Url Rewrite的目標(biāo)地址。如果我們沒(méi)有使用Partial Rendering,而是使用了最傳統(tǒng)的PostBack,雖然不會(huì)造成頁(yè)面功能的破壞,但是在PostBack之后,用戶(hù)就會(huì)發(fā)現(xiàn)地址欄的內(nèi)容變了,直接變成了目標(biāo)地址。這可不是我們希望看到的結(jié)果,既然Rewrite了,就把它Rewrite到底。當(dāng)然,我們依然可以使用上面提到的辦法,使用JavaScript來(lái)修改form元素的action,但是這個(gè)做法實(shí)在不夠“美觀大方”,而且用戶(hù)從HTML源文件中也可以看到我們Url Rewrite的目標(biāo)地址,不是嗎?
??
?? 如果我們能夠在服務(wù)器端設(shè)置Form的action就好了,可惜System.Web.UI.HTMLControls.HTMLForm類(lèi)不允許我們這么做。不過(guò)還好,我們用的是ASP.NET,我們用的是面向?qū)ο蟮木幊棠P汀S谑俏覀儭袄^承”System.Web.UI.HTMLControls.HTMLForm,實(shí)現(xiàn)一個(gè)自己的Form控件:
??
??繼承HTMLForm類(lèi)實(shí)現(xiàn)自己的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);
?? }
?? }
??}
???
??
?? 然后我們就可以在頁(yè)面中使用它了。當(dāng)然,在這之前,我們需要在頁(yè)面(或Web.config)里注冊(cè)它:
??
??使用我們自己實(shí)現(xiàn)的Form
??<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
?? Assembly="ActionlessForm" %>
??...
??<skm:Form id="Form1" method="post" runat="server">
??...
??</skm:Form>
??
?? 至此,我們已經(jīng)不需要在頁(yè)面里編寫(xiě)一段“巧妙”的JavaScript了,Url Rewrite之后form元素的action問(wèn)題被解決了。
?
=======================================
問(wèn)題描述:
一個(gè)頁(yè)面有兩次無(wú)刷新提交操作就出錯(cuò)了Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server.The status codereturnded from the server was:12031
解決:
在頁(yè)面上加了上面那段 JS 就解決問(wèn)題了,呵呵~~
<script language="javascript">
Sys.Application.add_load(function()
??? {
??????? var form = Sys.WebForms.PageRequestManager.getInstance()._form;
??????? form._initialAction = form.action = window.location.href;
??? });
</script>
轉(zhuǎn)載于:https://www.cnblogs.com/China-Dragon/archive/2009/05/12/1455099.html
總結(jié)
以上是生活随笔為你收集整理的Sys.WebForms.PageRequestManagerServerErrorException(status code 500 OR 12031)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ruby watir 登陆邮箱
- 下一篇: Validation of XML wi