ASP.NET AJAX提出了多種模型,在用戶端有Component、Control和Behavior模型,在伺服器端有ScirptControl和Extender模型。這些模型各有各的用途,但是請注意非常重要的一點:用戶端模型和伺服器端模型是互相獨立的。
ASP.NET AJAX的重要元件之一是Ajax Control Toolkit,其中包括了大量的Extender和Behavior。其中的Extender使用ASP.NET AJAX提出的Extender模型,在用戶端使用了Microsoft AJAX Library提出的Behavior模型。Extender和Behavior模型的組合提供了豐富的效果。那麼,究竟什麼是Extender模型,什麼是Behavior模型呢?
伺服器端的Extender控件其實是一個繼承了Control類并且實作了IExtenderControl接口的類,我們在開發時也可以直接繼承ExtenderControl類,它已經滿足了上述條件并且定義了一些常用的方法。Extender控件的作用,簡單說來隻是想用戶端輸出腳本,更确切地說,是将需要在頁面上執行的腳本告訴ScriptManager,ScriptManager會根據目前的狀況(普通加載還是異步回送)選擇不同的輸出方式。從理論上來說,Extender可以輸出任意腳本。是以我們隻能說“Ajax Control Tookit中的Extender在用戶端使用了Behavior”而不能說“Extender模型在用戶端使用了Behavior模型”。
Behavior模型在用戶端提供了豐富的功能,它操作的完全是用戶端對象,有些可能會通路Web Service方法,但是這并不影響它僅僅是在用戶端工作的這個特性。Behavior完全可以獨立于伺服器端工作,用戶端(浏覽器)隻是按部就班地執行用戶端的代碼,它也不會知道究竟是何種伺服器技術生成了這些代碼。
是以,我們在使用Ajax Control Tookit時,也必須牢記以下幾條:
Extender模型和Behavior模型沒有必然聯系。
Behavior可以獨立于Extender執行。
所有效果是由Behavior提供的。
是以,我就能夠在用戶端使用ModalPopupBehavior來構造我所需要的效果了,這裡沒有Extender,這裡隻有Behavior。
關于第3條特性,我認為是最重要的,也是最常利用的一條。我經常會收到例如“如何點選另一個按鈕讓CollapsiblePanel收縮或打開”或者“如何切換ToggleButton狀态”這樣的提問,其實這些問題的答案是相同的,使用JavaScript來操作Behavior。Ajax Control Toolkit在服務期端提供的控件實在是太好用了,以至于官方将其托托放放的功能示範了一遍又一遍,樂此不疲。大量的示範卻讓人忘記了客戶段的Behavior才是關鍵,Behavior才是讓用戶端豐富多彩的功臣。
最近有位朋友問我,如何在用戶端使用Authentication Service登陸使用者以後,用ModalPopupExtender的方式将結果顯示給使用者呢?其實關鍵還是在于使用JavaScript來操作ModalPopupBehavior。我在這裡示範一下使用JavaScript操作ModalPopupBehavior的方法。
首先,在伺服器端放置一個ScriptManager、一個TextBox、一個Panel和一個ModalPopupBehavior。
一切都是最平常的使用方式,隻是以下幾點需要注意:
TextBox的display設為none:因為ModalPoupBehavior必須要有一個TargetControl,而這個TargetControl就作為彈出視窗的觸發器。我們現在必須把這個觸發器隐藏掉,不過請注意不能将其Visible設為False,否則用戶端的DOM結構中就沒有這個文本框了。
彈出Panel的display設為了none:這個已經是使用ModalPoupExtender的規則之一了,如果不将其display設為none,在頁面打開的瞬間Panel會出現在頁面上,然後馬上消失。這樣除了讓使用者看到了Panel之外,還可能影響布局,讓頁面顯得一片混亂。
ModalPopupExtender設定了BehaviorID:這是使用JavaScript操作Ajax Control Toolkit中Behavior的關鍵。在用戶端構造Behavior時可以沒有ID,但是如果沒有ID的話則無法在用戶端操作Behavior對象了。
然後,我們就可以在用戶端放置一個按鈕,然後使用JavaScript彈出視窗了。請注意,我們使用了$find通過BehaviorID來得到了ModalPopupBehavior執行個體,然後調用它的show方法:
這樣,視窗就彈出了。其實一切就是這麼簡單。
可能唯一的問題就是開發人員并不清楚該調用Behavior的哪個方法來工作。這其實并不構成障礙,我們隻要檢視Behavior的源代碼,看看那些沒有下劃線字首的方法(即公有方法)中名字和功能比較接近的即可。這就是使用合适方法名的好處,根本不需要些注釋就能明白方法的作用——更何況Ajax Control Toolkit中的Behavior注釋非常詳細。:)
這才是靈活使用Extender的方式。
本文轉自 jeffz 51CTO部落格,原文連結:http://blog.51cto.com/jeffz/59885,如需轉載請自行聯系原作者