程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET事件回傳機制

ASP.NET事件回傳機制

編輯:關於ASP.NET

在ASP.NET裡面我們最喜歡做的事情是拖動一個Button然後雙擊,然後輸入代碼就可以了。這個稱之為事件回傳機制,屬於軟件開發的體系范疇,但並不屬於Web開發的范疇,因為Web是基於TCP/IP協議的,但是TCP/IP協議確是一個無狀態的協議,那麼ASP.NET是如何引入事件回傳的呢?

首先請新建一個網站,然後添加一個WebUserControl,命名為:EventModule。如下:

現在在該EventModule裡面拖入一個一個Button和3個Label,如下:

然後雙擊該Button,輸入如下代碼:

this.Label1.Text = this.Button1.ID;
this.Label2.Text = this.Button1.ClientID;
this.Label3.Text = this.Button1.UniqueID;

將EventModule.ascx 拖入到Default.aspx裡面,按F5測試,然後雙擊一下該Button,看看有什麼情況。我這情況如下:

會不會覺得很疑惑呢?為什麼這三個ID都不一樣呢?那麼事件模型機制跟這存在著什麼聯系呢?OK,我們右擊該網頁,選擇查看源碼,找到這一行:

<input type="submit" name="EventModule1$Button1" value="EventButton" id="EventModule1_Button1" />

哦,這個是什麼?懂得ASP.NET的人會馬上發現這個是該Button生成的HTML代碼,搞ASP.NET開發的人可能會經常忽略掉這個HTML,因為這個並不是手工編寫的,自己使用的挺方便的不是嗎?如果這樣想,那麼我們這課也就沒有什麼意義了,刨根問底這是我最愛做的事情,如果您打算挖掘下去,那麼請您繼續,我保證這會讓您對ASP.NET的根本會有深的了解,當這些根本的認識積累到一定程度後,就能編寫出高性能的Web交互網站。

問題到這後我們該研究的是什麼呢?大家可以想一想當客戶端有人點擊這個Button這後,服務器端能准確無誤的響應相應的事件,那麼想必在服務器端有一個找到該Button的方法,但是通過什麼方法找到呢?

為了形成對比,比如為什麼服務器知道是這個Button而不是另外一個Button觸發了事件,我們在EventModule.ascx中拖入另一個Button,並雙擊它給它一個onclick事件,如下:

現在給上面的一個Button的事件代碼裡插入一個斷點(注意,該斷點只有在F5模式下才有用),如下:

F5測試,點擊該Button,就會返回到VS2005調試模式下。“局部變量”窗口->this->base->Request下找到Form元素,如下展開:

注意上面的綠色高亮顯示的地方,這裡可以發現,即使我們放置了兩個Button,但是通過TCP/IP協議返回到服務器端的卻只有一個Button,並且該Key為那個Button在客戶端對應的name值:EventModule1$Button1。這也是我為什麼最開始讓你們查看源代碼的原因(注意:EventModuel1是EventModule.ascx在Default.aspx上自動創建的ID)。好了,真相應該比較清楚了,那麼ASP.NET是如何通過EventModule1$Button1找到該Button的呢。首先我們可以做如下分析Default.aspx下有一個Child,名為EventModule1,EventModule1下有一個Button,名為Button1。於是“$"就成了我們查找子控件的標識符,由於在同一級頁面裡的所有子控件的ID必須不同,因而每個對象都對應一個UniqueID,也就是EventModule1$Button1,那麼ASP.NET就能通過這種方式准確無誤的找到我們對應的控件,並激活它所對應的OnClick事件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved