Delegate Control代理控件如同一個控件的容器,它提供了一種機制容許在不直接修改控件的前提下將代理控件內的控件替換成爲自定義的控件。代理控件很相似於PlaceHolder,可是它和PlaceHolder的最大區別在於其內包含的控件能夠被替代,稱之爲代理控件。html
SharePoint 提供了很多的delegate controls:ide
AdditionalPageHead
GlobalSiteLink0
GlobalSiteLink1
GlobalSiteLink2
PublishingConsole
QuickLaunchDataSource
SmallSearchInputBox
TopNavigationDataSource測試
下面是Sharepoint Fundation的MasterPage定義的一些Delegate Controls網站
<SharePoint:DelegateControl runat="server" ControlId="AdditionalPageHead"
AllowMultipleControls="true"/>
<SharePoint:DelegateControl runat="server" ControlId="GlobalNavigation" />
<SharePoint:DelegateControl runat="server" ID="GlobalDelegate0" ControlId="GlobalSiteLink0" />
<SharePoint:DelegateControl ControlId="GlobalSiteLink2" ID="GlobalDelegate2" Scope="Farm"
runat="server" />
<SharePoint:DelegateControl runat="server" ControlId="PublishingConsole"
Id="PublishingConsoleDelegate">
</SharePoint:DelegateControl><SharePoint:DelegateControl ControlId="GlobalSiteLink3" Scope="Farm"
runat="server" />
<SharePoint:DelegateControl runat="server" ControlId="SmallSearchInputBox" Version="4" />
<SharePoint:DelegateControl runat="server" ControlId="TopNavigationDataSource"
Id="topNavigationDelegate"/>ui
上面所列舉的Delegate controls能夠在運行時被用戶自定義的控件或Feature動態替換。咱們這裏所須要實現的建立自定義SearchBox功能就須要經過用咱們自行開發的MySearchBox用戶控件代替 Small Search Input box這個delegate control來實現。spa
讓咱們來看一看delegate control 的XML schema代理
<?xml version="1.0" encoding="utf-8" ?> code
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">server
<Control Id="SmallSearchInputBox" Sequence="100" ControlSrc="/templates/mysearchcontrol.ascx"/>xml
</Elements>
從上面的schema,咱們能夠看出,delegate control的重要屬性包括 Control Id, Sequence 和 ControlSrc.
Control Id 是咱們用來識別Delegate control的
Sequence number 是咱們用來定位Delegate control的等級的,它的值越小則等級越高。
ControlSrc 則用來指明Delegate Control的控件資源的位置的。
關於SequenceNumber咱們能夠進一步用圖示說明
在上圖的示例中,針對同一Delegate control咱們定義了3個用戶控件並經過3個Feature(A,B,C)來啓用它們,但注意,它們有不一樣的Sequence(A>C>B),全部這3個user control都會被用來代替那個指定的Delegate Control,但因爲Feature B的Sequence Number最小,因此,Feature B中的usercontrol在Runtime的時候會取得最終的代替權,並被Render到Page中呈現出來。可是,當Feature B被中止時,Feature C就會頂替上來,由於Feature C中的Sequence僅次於Feature B,當Feature B被中止後,Feature C就成了最小的了,因此,它就會取得最終的勝利。
有了上面的知識準備,回到本文的目標,建立一個用戶自定義的SearchBox。
首先建立一個新的項目,在此項目裏添加一個新的用戶控件,在此用戶控件中拖放一個日曆控件,咱們就用此日曆控件來示例如何代替默認的SearchBox控件。
項目以下圖
而後,咱們須要在系統中添加一個Feature,命名此Feature以下
在此Feature中,咱們定義了Scope的範圍是站點的級別的,那就意味着你整個站點頁面中的搜索控件都會被替換爲你本身定製的樣式。
接下來,咱們須要新添加一個Elment.xml,以下圖。
須要注意的是,Sequence屬性的值必定要小於默認提供的,這個Sequence的值在wss中是100,在moss標準版中是50,企業版是25。
在MOSS的安裝目錄下搜索指定feature中對應的xml文件,打開它能夠看到裏面所定義的Sequence值(名字:SearchArea.xml)。
最後,編譯部署,打開咱們的測試網站能夠看到效果以下圖.
原文連接:http://www.cnblogs.com/wsdj-ITtech/archive/2011/11/26/2263041.html