之前在ASP中,不存在事件處理,傳統的處理方法是經過隱藏文本框來提交不一樣的參數進行區別用戶的不一樣動做,或則用不一樣的URL查詢字符串來區別。ASP.NET中出現了事件處理,讓開發人員區分用戶動做方便並簡單了許多。javascript
實際上,ASP.NET中區別用戶動做引起的事件處理一樣也是採用了傳統方式,不過,MS將其封裝了起來,讓開發人員用起來更貼近於軟件開發中的事件驅動方式。java
在ASP.NET中,幾乎每個控件都帶有多種事件,開發人員能夠在後臺經過編寫事件捆綁和事件處理來完成不一樣的工做。而且,能夠在傳統方式中沒法引起事件的控件中使用事件,如超連接、圖片、純文本。app
ASP.NET中辨別用戶動做關聯事件的方法整體來看能夠分紅兩種。ide
1、在只存在BUTTON按鈕控件的狀況下,ASP.NET辨別用戶動做並關聯事件不須要其餘輔助方式。spa
ASP.NET將全部的BUTTON在生成HTML代碼的時候都生成爲SUBMIT的提交按鈕,當多個提交按鈕在同一個FORM內時,經過SUBMIT按鈕提交的FORM集合中不會包含其餘SUBMIT類型的提交按鈕,這樣,ASP.NET在預處理的前就將全部SUBMIT提交按鈕記錄下來,用戶執行提交後ASP.NET挨個的檢查FORM集合中的SUBMIT按鈕,由於只可能存在一個SUBMIT,因此檢查出的惟一的一個SUBMIT就是用戶動做觸發提交的按鈕,而後再對應的執行這個按鈕的後臺事件處理。orm
2、在存在傳統中並不能直接執行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方法將頁面提交。ip
頁面提交後,ASP.NET會首先檢查兩個隱藏表單中的值,而後根據這兩個值首先執行控件中的處理方法,而後控件內部的處理再將事件委託給頁面的相關事件進行處理。開發
這樣ASP.NET就完成了經過用戶動做觸發關聯事件處理程序的過程。