自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET組件設(shè)計之傳輸機制淺析

開發(fā) 后端
ASP.NET組件設(shè)計之傳輸機制是什么呢?本文就向你介紹這方面的內(nèi)容。

ASP.NET組件設(shè)計之傳輸機制的討論:

ASP.NET頁面如果是通過post請求到服務(wù)器,框架將會遵行事件周期生成、調(diào)用控件,而控件(如果支持回傳)則將加載回傳數(shù)據(jù),并且映射成控件的服務(wù)器端事件,就好像在重放客戶的客戶行為(客戶按下一個按鈕,卻引發(fā)服務(wù)器端控件的click事件)。其中的機制如何?

ASP.NET組件設(shè)計之傳輸機制的問題:如果一個控件需要處理回傳事件,那么必須實現(xiàn)一個特定接口 IPostBackEventHandler接口:

  1. public interface IPostBackEventHandler{  
  2.  
  3.     void RaisePostBackEvent(string eventArgument);  
  4.  

ASP.NET組件設(shè)計之傳輸機制的另外一個接口:

  1. IPostBackDataHandler   
  2.  
  3. {  
  4.  
  5. bool LoadPostData( string postDataKey,   NameValueCollection postCollection);  
  6.  
  7. void RaisePostDataChangedEvent();  
  8.  

一旦控件實現(xiàn)了這些接口,頁面框架就會自動在PostBack數(shù)據(jù)完成后,調(diào)用控件的此接口IPostBackDataHandler。LoadPostData,從而讓控件讀取post上來的數(shù)據(jù)。PostDataKey為PostBack數(shù)據(jù)中的命名鍵名,通過NameValueCollection[postDataKey]可以獲得頁面框架傳遞給控件的值。控件應(yīng)當(dāng)讀取此值,進行自己內(nèi)部狀態(tài)更新,反映狀態(tài)變化。如果控件返回真,表示服務(wù)器控件狀態(tài)改變,此時頁面框架會立即調(diào)用此控件的RaisePostDataChangedEvent方法。此時,控件應(yīng)當(dāng)自己定義該引發(fā)那些服務(wù)器控件對外提供的事件。這些事件往往是控件編程者精心設(shè)計留給使用這控鍵的aspx編程者的代碼舞臺。

至于另一個接口IPostBackEventHandler,也是回傳時候服務(wù)器調(diào)用的接口。我們知道每一個控件都有一個UniqueID,當(dāng)客戶端觸發(fā)一個可以引起回傳的客戶端事件(譬如按下了submit按鈕),那么自然HTTP Post數(shù)據(jù)到服務(wù)器端,服務(wù)器頁面框架進行到PostBack處理時候,會檢索控件是否支持IpostBackEventHandler接口,并且查找控件的UniqueID發(fā)現(xiàn)支持就立即調(diào)用此接口的RaisePostBackEvent方法,表示UniqueID的控件發(fā)生了一個需要捕獲的事件。很明顯,并非客戶端所有事件都可以投射到服務(wù)器端,只能夠是能夠引發(fā)Post Back(也就是能夠提交表單數(shù)據(jù)到服務(wù)器的事件)的事件和控件。注意,這里嚴格要求了UniqueID必須在服務(wù)器端和客戶端對應(yīng)一致,否則無法映射事件。

值得控件編寫者注意的是,如果要實現(xiàn)接口,需要如下實現(xiàn)接口,而不是通常的僅僅接口方法名同名即可:

  1. void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)  
  2.  
  3. {  
  4.  
  5.        ……  
  6.  

ASP.NET組件設(shè)計之傳輸機制的實現(xiàn)接口方面也就是說,接口針對頁面框架實現(xiàn)的,也由頁面框架調(diào)用。

另一方面,在客戶端,能夠引起回傳的實際上僅有2個HTML元素﹤inoput type=submit ﹥和﹤input type=image,但是通過客戶端腳本,其他客戶端事件也可導(dǎo)致回傳數(shù)據(jù)到服務(wù)器端。Page類提供了一系列的方法來幫助實現(xiàn)其他可引發(fā)回傳的途徑:

  1. public string GetPostBackClientEvent(  
  2.  
  3.    Control control,  
  4.  
  5.    string argument  
  6.  
  7. ); 

獲取對客戶端腳本函數(shù)的引用,該函數(shù)在被調(diào)用時將導(dǎo)致服務(wù)器回發(fā)到窗體。

  1. public string GetPostBackClientHyperlink(  
  2.  
  3.    Control control,  
  4.  
  5.    string argument  
  6.  
  7. ); 

將 javascript: 追加到從 GetPostBackEventReference 調(diào)用的返回的開頭,從而使服務(wù)器上可以進行超級鏈接回發(fā)處理。

  1. public string GetPostBackEventReference(Control);  
  2.  
  3. public string GetPostBackEventReference(Control, string); 

獲取對客戶端腳本函數(shù)的引用,調(diào)用該函數(shù)將使服務(wù)器

如果一個控件確定通過以上方法確保客戶端引發(fā)回傳事件,那么控件引用頁將導(dǎo)致最終輸出到客戶端的HTML中包含腳本,并且腳本中藏有如下隱含變量:

  1. ﹤input type=”hidden” name=”__EVENTTARGET” value=””﹥  
  2.  
  3. ﹤input type=”hidden” name=”__EVENTARGUMENT” value=””﹥  
  4.  
  5. ﹤script language=”javascript”﹥  
  6.  
  7. ﹤!—  
  8.  
  9. function __doPostBack(eventTarget,eventArgument)  
  10.  
  11.         {  
  12.  
  13.         var theform=document._ct10;  
  14.  
  15.         theform.__EVENTTARGET.value= eventTarget;  
  16.  
  17.         theform.__EVENTARGUMENT.value= eventArgument;  
  18.  
  19.         }  
  20.  
  21. -- ﹥  
  22.  
  23. ﹤/script﹥ 

任何客戶端腳本只要合法調(diào)用了__doPostBack方法即可實現(xiàn)回傳到服務(wù)器端,并且服務(wù)器端也知道了是引發(fā)了那一個UniqueID得控件的事件。

ASP.NET組件設(shè)計之傳輸機制方面的內(nèi)容就簡單的向你介紹到這里,希望對你學(xué)習(xí)ASP.NET組件設(shè)計之傳輸機制有所幫助。

【編輯推薦】

  1. ASP.NET組件設(shè)計學(xué)習(xí)之創(chuàng)建工程庫
  2. ASP.NET組件設(shè)計學(xué)習(xí)之ASP.NET服務(wù)器控件
  3. ASP.NET自定義控件入門淺析
  4. ASP.NET服務(wù)器控件視圖淺析
  5. ASP.NET組件設(shè)計之生命周期詳解
責(zé)任編輯:仲衡 來源: cnblogs
相關(guān)推薦

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設(shè)計

2009-08-05 16:53:14

ASP.NET組件設(shè)計

2009-08-05 16:59:55

ASP.NET組件設(shè)計

2009-08-03 18:35:51

ASP.NET數(shù)據(jù)緩存

2009-08-10 15:42:33

ASP.NET Che

2009-08-10 16:07:44

ASP.NET Lin

2009-08-10 14:08:15

ASP.NET服務(wù)器控ASP.NET組件設(shè)計

2009-08-03 13:38:18

ASP.NET編程模型

2009-08-07 17:49:44

控件設(shè)計器

2009-08-10 10:19:47

ASP.NET組件設(shè)計

2009-04-08 09:58:07

ASP.NET MVCTempData框架

2009-08-07 16:32:52

ASP.NET控件設(shè)計時支

2009-08-07 17:59:35

控件設(shè)計器

2009-10-14 10:26:00

Route組件

2009-08-10 14:48:39

ASP.NET組件設(shè)計

2009-08-10 14:31:46

ASP.NET組件設(shè)計ASP.NET控件生命

2009-07-24 13:41:15

ASP.NET AJA

2009-08-05 18:36:12

ASP.NET Che

2009-07-31 12:43:59

ASP.NET MVC

2009-08-05 15:50:13

ASP.NET優(yōu)點
點贊
收藏

51CTO技術(shù)棧公眾號