Asp.net页面事件引发后台程序处理原理【转】
以前在ASP中,不存在事件處理,傳統的處理方法是通過隱藏文本框來提交不同的參數進行區別用戶的不同動作,或則用不同的URL查詢字符串來區別。ASP.NET中出現了事件處理,讓開發人員區分用戶動作方便并簡單了許多。
實際上,ASP.NET中區別用戶動作引發的事件處理同樣也是采用了傳統方式,不過,MS將其封裝了起來,讓開發人員用起來更貼近于軟件開發中的事件驅動方式。
在ASP.NET中,幾乎每一個控件都帶有多種事件,開發人員可以在后臺通過編寫事件捆綁和事件處理來完成不同的工作。并且,可以在傳統方式中無法引發事件的控件中使用事件,如超鏈接、圖片、純文本。
ASP.NET中辨別用戶動作關聯事件的方法總體來看可以分成兩種。
一、在只存在BUTTON按鈕控件的情況下,ASP.NET辨別用戶動作并關聯事件不需要其他輔助方式。
ASP.NET將所有的BUTTON在生成HTML代碼的時候都生成為SUBMIT的提交按鈕,當多個提交按鈕在同一個FORM內時,通過SUBMIT按鈕提交的FORM集合中不會包含其他SUBMIT類型的提交按鈕,這樣,ASP.NET在預處理的前就將所有SUBMIT提交按鈕記錄下來,用戶執行提交后ASP.NET挨個的檢查FORM集合中的SUBMIT按鈕,因為只可能存在一個SUBMIT,所以檢查出的唯一的一個SUBMIT就是用戶動作觸發提交的按鈕,然后再對應的執行這個按鈕的后臺事件處理。
二、在存在傳統中并不能直接執行FORM提交的控件時。ASP.NET通過使用兩個隱藏的文本表單控件來辨別用戶執行的提交動作。
當在ASPX文件中使用了LINKBUTTON或則其他不是傳統的SUBMIT提交按鈕來執行后臺事件處理的時候,ASP.NET生成的HTML代碼中在FORM內的最前面會生成出兩個隱藏的文本筐控件
<input type="hidden" name="__EVENTTARGET">
<input type="hidden" name="__EVENTARGUMENT">
并生成一段JAVASCRIPT代碼
<script language="javascript">
<!--
?function __doPostBack(eventTarget, eventArgument) {
? var theform;
? if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
?? theform = document.forms["Form1"];
? }
? else {
?? theform = document.Form1;
? }
? theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
? theform.__EVENTARGUMENT.value = eventArgument;
? theform.submit();
?}
// -->
</script>
然后在每個加有事件處理的控件的事件屬性中都加上了__doPostBack('控件ID','參數值')這個JAVASCRIPT方法,__doPostBack這個JAVASCRIPT處理方法的作用就是將調用這個方法的控件ID記錄下來,如果是在模板類型的控件中還需要一些組合轉換,然后記錄執行參數。最后,將這兩個值分別賦給在FORM內最前面的那兩個隱藏文本筐中,最后,執行FORM的SUBMIT方法將頁面提交。
頁面提交后,ASP.NET會首先檢查兩個隱藏表單中的值,然后根據這兩個值首先執行控件中的處理方法,然后控件內部的處理再將事件委托給頁面的相關事件進行處理。
這樣ASP.NET就完成了通過用戶動作觸發關聯事件處理程序的過程。
?
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/banmuhuangci/archive/2006/10/31/1358057.aspx
轉載于:https://www.cnblogs.com/cxd4321/archive/2009/09/22/1571950.html
總結
以上是生活随笔為你收集整理的Asp.net页面事件引发后台程序处理原理【转】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 楚乔真实身份是什么 最后什么结局
- 下一篇: 加密和解密类