您好,登錄后才能下訂單哦!
這篇文章主要介紹“ASP.NET傳輸機制是什么”,在日常操作中,相信很多人在ASP.NET傳輸機制是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ASP.NET傳輸機制是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
ASP.NET頁面如果是通過post請求到服務器,框架將會遵行事件周期生成、調用控件,而控件(如果支持回傳)則將加載回傳數據,并且映射成控件的服務器端事件,就好像在重放客戶的客戶行為(客戶按下一個按鈕,卻引發服務器端控件的click事件)。其中的機制如何?
ASP.NET組件設計之傳輸機制的問題:如果一個控件需要處理回傳事件,那么必須實現一個特定接口 IPostBackEventHandler接口:
public interface IPostBackEventHandler{ void RaisePostBackEvent(string eventArgument); }
ASP.NET組件設計之傳輸機制的另外一個接口:
IPostBackDataHandler { bool LoadPostData( string postDataKey, NameValueCollection postCollection); void RaisePostDataChangedEvent(); }
一旦控件實現了這些接口,頁面框架就會自動在PostBack數據完成后,調用控件的此接口IPostBackDataHandler。LoadPostData,從而讓控件讀取post上來的數據。PostDataKey為PostBack數據中的命名鍵名,通過NameValueCollection[postDataKey]可以獲得頁面框架傳遞給控件的值。控件應當讀取此值,進行自己內部狀態更新,反映狀態變化。如果控件返回真,表示服務器控件狀態改變,此時頁面框架會立即調用此控件的RaisePostDataChangedEvent方法。此時,控件應當自己定義該引發那些服務器控件對外提供的事件。這些事件往往是控件編程者精心設計留給使用這控鍵的aspx編程者的代碼舞臺。
至于另一個接口IPostBackEventHandler,也是回傳時候服務器調用的接口。我們知道每一個控件都有一個UniqueID,當客戶端觸發一個可以引起回傳的客戶端事件(譬如按下了submit按鈕),那么自然HTTP Post數據到服務器端,服務器頁面框架進行到PostBack處理時候,會檢索控件是否支持IpostBackEventHandler接口,并且查找控件的UniqueID發現支持就立即調用此接口的RaisePostBackEvent方法,表示UniqueID的控件發生了一個需要捕獲的事件。很明顯,并非客戶端所有事件都可以投射到服務器端,只能夠是能夠引發Post Back(也就是能夠提交表單數據到服務器的事件)的事件和控件。注意,這里嚴格要求了UniqueID必須在服務器端和客戶端對應一致,否則無法映射事件。
值得控件編寫者注意的是,如果要實現接口,需要如下實現接口,而不是通常的僅僅接口方法名同名即可:
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument) { …… }
ASP.NET組件設計之傳輸機制的實現接口方面也就是說,接口針對頁面框架實現的,也由頁面框架調用。
另一方面,在客戶端,能夠引起回傳的實際上僅有2個HTML元素﹤inoput type=submit ﹥和﹤input type=image,但是通過客戶端腳本,其他客戶端事件也可導致回傳數據到服務器端。Page類提供了一系列的方法來幫助實現其他可引發回傳的途徑:
public string GetPostBackClientEvent( Control control, string argument );
獲取對客戶端腳本函數的引用,該函數在被調用時將導致服務器回發到窗體。
public string GetPostBackClientHyperlink( Control control, string argument );
將 javascript: 追加到從 GetPostBackEventReference 調用的返回的開頭,從而使服務器上可以進行超級鏈接回發處理。
public string GetPostBackEventReference(Control); public string GetPostBackEventReference(Control, string);
獲取對客戶端腳本函數的引用,調用該函數將使服務器
如果一個控件確定通過以上方法確保客戶端引發回傳事件,那么控件引用頁將導致最終輸出到客戶端的HTML中包含腳本,并且腳本中藏有如下隱含變量:
﹤input type=”hidden” name=”__EVENTTARGET” value=””﹥ ﹤input type=”hidden” name=”__EVENTARGUMENT” value=””﹥ ﹤script language=”javascript”﹥ ﹤!— function __doPostBack(eventTarget,eventArgument) { var theform=document._ct10; theform.__EVENTTARGET.value= eventTarget; theform.__EVENTARGUMENT.value= eventArgument; } -- ﹥ ﹤/script﹥
任何客戶端腳本只要合法調用了__doPostBack方法即可實現回傳到服務器端,并且服務器端也知道了是引發了那一個UniqueID得控件的事件。
到此,關于“ASP.NET傳輸機制是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。