asp.net页面回传与js调用服务端事件、PostBack的原理详解
生活随笔
收集整理的這篇文章主要介紹了
asp.net页面回传与js调用服务端事件、PostBack的原理详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ASP.ENT中,有兩種實現頁面PostBack的機制,不管是哪種回傳方式,最終均是Form表單提交。 一、原始的Form表單提交 WebControls中的Button和ImageButton控件,到客戶端會轉換為
<input type="submit"name=""/>
<input type="image"name=""/>
二、利用JavaScript和隱藏表單實現表單提交 除Button和ImageButton外,其他WebControls控件均是以這種方式實現頁面回傳機制的。具體步驟如下: 1、如果頁面中存在除Button和ImageButton外的服務端控件,ASP.NET頁面框架會自動在頁面中增加兩個隱藏表單。
<input type="hidden"name="__EVENTTARGET"id="__EVENTTARGET"value=""/>
<input type="hidden"name="__EVENTARGUMENT"id="__EVENTARGUMENT"value=""/>
2、服務端自動生成如下的JavaScript方法,處理事件的發送。
<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、每個會引發服務端事件的控件都會在響應的客戶端事件中調用上面的代碼。 以<asp:LinkButton>服務端控件為例說明,以下為服務端到客戶端的映射:
<a id="LinkButton1"href="javascript:__doPostBack('LinkButton1','')">LinkButton</a>
但是,經過試驗,我發現<asp:Checkbox>、<asp:TextBox>等服務端控件并不能自動在客戶端生成調用JavaScrip的__doPostBack方法的代碼。 4.客戶端觸發事件后調用__doPostBack方法,將表示觸發的控件源的eventTarget 和事件參數eventArgument分別付給兩個隱藏域__EVENTTARGET和__EVENTARGUMENT,然后提交Form,在服務端根據__EVENTTARGET和__EVENTARGUMENT來判斷是哪個控件的什么事件觸發了。
總結
以上是生活随笔為你收集整理的asp.net页面回传与js调用服务端事件、PostBack的原理详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET服务器控件的生命周期分析
- 下一篇: 详解Struts2 Action名称的搜