日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
ASP.NET組件設(shè)計(jì)之傳輸機(jī)制淺析

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

目前創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、鳳翔網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

如果一個(gè)控件確定通過(guò)以上方法確??蛻舳艘l(fā)回傳事件,那么控件引用頁(yè)將導(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方法即可實(shí)現(xiàn)回傳到服務(wù)器端,并且服務(wù)器端也知道了是引發(fā)了那一個(gè)UniqueID得控件的事件。

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


網(wǎng)站標(biāo)題:ASP.NET組件設(shè)計(jì)之傳輸機(jī)制淺析
網(wǎng)頁(yè)地址:http://www.5511xx.com/article/dpoiphd.html