摘要:
ASP.ENT中,有兩種實現頁面PostBack的機制,不管是哪種回傳方式,最終均是Form表單提交。
一、原始的Form表單提交
WebControls中的Button和ImageButton控制項,到用戶端會轉換為
Html代碼
<input type="submit" name="" /> <input type="image" name=""/>
二、利用JavaScript和隱藏表單實現表單提交
除Button和ImageButton外,其他WebControls控制項均是以這種方式實現頁面回傳機制的。具體步驟如下:
1、如果頁面中存在除Button和ImageButton外的服務端控制項,ASP.NET頁面架構會自動在頁面中增加兩個隱藏表單。
Html代碼
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
2、服務端自動產生如下的JavaScript方法,處理事件的發送。
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>服務端控制項為例說明,以下為服務端到用戶端的映射:
Html代碼
<a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a>
注意:<asp:Checkbox>、<asp:TextBox>等伺服器控制項不自動產生在用戶端調用JS的__doPostBack方法
4.用戶端觸發事件後調用__doPostBack方法,將表示觸發的控制項源的eventTarget 和事件參數eventArgument分別付給兩個隱藏欄位__EVENTTARGET和__EVENTARGUMENT,然後提交Form,在服務端根據__EVENTTARGET和__EVENTARGUMENT來判斷是哪個控制項的什麼事件觸發了。