asp.net页面回传与js调用服务端事件、PostBack的原理详解
生活随笔
收集整理的這篇文章主要介紹了
asp.net页面回传与js调用服务端事件、PostBack的原理详解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ASP.ENT中,有兩種實(shí)現(xiàn)頁面PostBack的機(jī)制,不管是哪種回傳方式,最終均是Form表單提交。 一、原始的Form表單提交 WebControls中的Button和ImageButton控件,到客戶端會(huì)轉(zhuǎn)換為
<input type="submit"name=""/>
<input type="image"name=""/>
二、利用JavaScript和隱藏表單實(shí)現(xiàn)表單提交 除Button和ImageButton外,其他WebControls控件均是以這種方式實(shí)現(xiàn)頁面回傳機(jī)制的。具體步驟如下: 1、如果頁面中存在除Button和ImageButton外的服務(wù)端控件,ASP.NET頁面框架會(huì)自動(dòng)在頁面中增加兩個(gè)隱藏表單。
<input type="hidden"name="__EVENTTARGET"id="__EVENTTARGET"value=""/>
<input type="hidden"name="__EVENTARGUMENT"id="__EVENTARGUMENT"value=""/>
2、服務(wù)端自動(dòng)生成如下的JavaScript方法,處理事件的發(fā)送。
<script type="text/javascript">
<!--
var theForm = document.forms['form1'];
if (!theForm) {theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {if (!theForm.onsubmit || (theForm.onsubmit() != false)) {theForm.__EVENTTARGET.value = eventTarget;theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
// -->
</script>
3、每個(gè)會(huì)引發(fā)服務(wù)端事件的控件都會(huì)在響應(yīng)的客戶端事件中調(diào)用上面的代碼。 以<asp:LinkButton>服務(wù)端控件為例說明,以下為服務(wù)端到客戶端的映射:
<a id="LinkButton1"href="javascript:__doPostBack('LinkButton1','')">LinkButton</a>
但是,經(jīng)過試驗(yàn),我發(fā)現(xiàn)<asp:Checkbox>、<asp:TextBox>等服務(wù)端控件并不能自動(dòng)在客戶端生成調(diào)用JavaScrip的__doPostBack方法的代碼。 4.客戶端觸發(fā)事件后調(diào)用__doPostBack方法,將表示觸發(fā)的控件源的eventTarget 和事件參數(shù)eventArgument分別付給兩個(gè)隱藏域__EVENTTARGET和__EVENTARGUMENT,然后提交Form,在服務(wù)端根據(jù)__EVENTTARGET和__EVENTARGUMENT來判斷是哪個(gè)控件的什么事件觸發(fā)了。
總結(jié)
以上是生活随笔為你收集整理的asp.net页面回传与js调用服务端事件、PostBack的原理详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET服务器控件的生命周期分析
- 下一篇: 动态添加控件及将某XML动态加入到Act