Delegate Control

Contains a certain predefined element of the SharePoint Products and Technologies environment to replace with another control through a SharePoint Feature.

Real World Example

A user wants to replace the built-in search control with a richer version. He creates a Feature that includes a delegate control to override the delegate control placeholder.

Technical Details

The following code example shows a delegate control placeholder defined in the built-in pages. A delegate control that matches the control ID renders in its place at run time.

<SharePoint:DelegateControl  ControlId="SmallSearchInputBox"/>

Following is the definition of the SmallSearchInputBox control included in the OSearchBasicFeature feature provided in Microsoft Office SharePoint Server 2007. Any Web site that is running under a Web application that has this Feature activated would render this control in place of the delegate placeholder.

<Elements xmlns="https://schemas.microsoft.com/sharepoint/">
   <Control Id="SmallSearchInputBox" Sequence="50" ControlClass="Microsoft.SharePoint.Portal.WebControls.SearchBoxEx" ControlAssembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
      <Property Name="GoImageUrl">/_layouts/images/gosearch.gif</Property>
      <Property Name="GoImageUrlRTL">/_layouts/images/goRTL.gif</Property>
      <Property Name="GoImageActiveUrl">/_layouts/images/gosearch.gif</Property>
      <Property Name="GoImageActiveUrlRTL">/_layouts/images/goRTL.gif</Property>
      <Property Name="DropDownMode">ShowDD</Property>
      <Property Name="SearchResultPageURL">/_layouts/osssearchresults.aspx</Property>
      <Property Name="ScopeDisplayGroupName"></Property>
      <Property Name="FrameType">None</Property>
   </Control>
</Elements>

A delegate control Feature can override the default control placeholder without using an assembly if a control template user control is referenced. Also, if multiple delegate controls exist for a single placeholder that is not marked as multiple, the intended delegate control will require a lower sequence number as follows.

<Control Id="SmallSearchInputBox" Sequence="40" ControlSrc="~/_controltemplates/mycustomarea.ascx"/>

Support Details

Delegate controls rely on server-side code in the form of ASCX pages or of compiled classes, which both can expose the risk of server-side performance or security issues.

A given delegate control will not render, even though the Feature that defines it is activated on a specific Web site, if the delegate control placeholder tag is not available on the page that should be rendering it. This could occur if a delegate control is used on a site that was upgraded but which is still customized, because the page within the site will not contain the delegate control placeholder. Another cause of this problem can be a designer inadvertently removing a placeholder control from a page.