Использование пользовательского источника данных для навигации
Дата последнего изменения: 1 ноября 2010 г.
Применимо к: SharePoint Foundation 2010
В хроме для веб-сайта Microsoft SharePoint Foundation содержится несколько элементов управления навигацией, связанных с элементами управления источником данных. Во всех случаях функцией элемента управления источником данных является извлечение узлов карты сайта или других навигационных данных из поставщика навигации и их передача в элемент управления навигацией для отображения.
Некоторые элементы управления источником данных, связанные со встроенными элементами управления навигацией, можно заменить на элементы управления собственной разработки. При такой модификации не требуется менять главные страницы или разворачивать пользовательские страницы контента. Механизм замены осуществляется целиком с помощью инструкций, объявленных в компоненте SharePoint Foundation. Сведения о создании и развертывании компонентов см. в статье Использование компонентов.
Настраиваемые источники данных
На главных страницах, которые устанавливаются вместе с SharePoint Foundation, элементы управления источником данных, связанные с тремя важными элементами управления навигацией, объявляются как замещаемые элементы управления что позволяет заменять источники данных на делегаты. Для каждого из следующих элементов управления навигацией можно использовать настраиваемый источник данных:
верхняя панель ссылок;
панель быстрого запуска;
древовидная навигация.
Чтобы заменить источник данных по умолчанию для любого из этих элементов управления, нужно создать компонент и развернуть его в решении фермы. Для замены можно использовать один из элементов управления источником данных, предоставляемых в SharePoint Foundation или Microsoft .NET Framework, либо самостоятельно разработанный элемент управления источником данных. При создании собственного элемента управления источником данных скомпилированную сборку необходимо установить в глобальном кэше сборок либо с помощью компонента, в котором объявляется замена делегатов, либо другим способом. Настраиваемый элемент управления также должен содержать запись SafeControl в файле web.config. Дополнительные сведения см. в статье Настройка элемента управления Delegate.
Принцип действия замены элементов управления
Как и элемент управления заполнителем, замещаемый элемент управления определяет область на главной странице, которая может замещаться другим контентом. В данном случае элемент управления источником данных является контентом по умолчанию, вместо которого во время выполнения может подставляться замещающий элемент управления.
Например, в следующем фрагменте из v4.master объявляется элемент управления AspMenu для верхней панели ссылок и DelegateControl в качестве источника данных для меню. Контентом по умолчанию для делегата является элемент управления SiteMapDataSource.
<SharePoint:AspMenu
ID="TopNavigationMenuV4"
Runat="server"
EnableViewState="false"
DataSourceID="topSiteMap"
AccessKey="1"
UseSimpleRendering="true"
UseSeparateCss="false"
Orientation="Horizontal"
StaticDisplayLevels="2"
MaximumDynamicDisplayLevels="1"
SkipLinkText=""
CssClass="s4-tn"/>
<SharePoint:DelegateControl
runat="server"
ControlId="TopNavigationDataSource"
Id="topNavigationDelegate">
<Template_Controls>
<asp:SiteMapDataSource
ShowStartingNode="False"
SiteMapProvider="SPNavigationProvider"
id="topSiteMap"
runat="server"
StartingNodeUrl="sid:1002"/>
</Template_Controls>
</SharePoint:DelegateControl>
Как и в случае с элементом управления заполнителем контент по умолчанию для замещаемого элемента управления может заменяться на пользовательский контент, в данном случае — на другой элемент управления. Отличие замещаемого элемента управления состоит в том, что его контент по умолчанию не переопределяется путем добавления разметки на страницу контента, как происходит с заполнителем. Замена происходит путем развертывания решения фермы, включающего компонент, в котором определяется элемент управления для замены и замещающий элемент управления.
Подробное описание процедуры реализации компонента для замены делегатов описывается в статье Настройка элемента управления Delegate. Вкратце, в компонент добавляется манифест элемента, а в манифесте определяется элемент Control, который определяет замещаемый элемент управления, а также сборку и класс варианта замены.
Например, в следующем XML-коде источник данных для верхней панели ссылок заменяется на настраиваемый элемент управления источником данных с именем Contoso.NavigationDataSource.
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="https://schemas.microsoft.com/sharepoint/">
<Control Id="TopNavigationDataSource"Sequence="50"
ControlClass="Contoso.NavigationDataSource"
ControlAssembly="Contoso, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Property Name="SiteMapProvider">SPNavigationProvider</Property>
<Property Name="ID">topSiteMap</Property>
</Control>
</Elements>
Значение атрибута ControlId в замещаемом элементе управления равно TopNavigationDataSource. Таким образом, значение атрибута Id элемента Control также должно быть равно TopNavigationDataSource. В результате настраиваемый элемент управления оказывается связанным с целевым делегатом.
Атрибуты ControlClass и ControlAssembly элемента Control сообщают SharePoint Foundation, где искать вариант элемента управления. Подписанная сборка, которая содержит код для элемента управления, должна быть установлена в глобальном кэше сборок.
Главной частью в примере разметки является элемент Property, в котором атрибуту ID варианта элемента управления присваивается значение topSiteMap. Такое же значение используется в элементе управления AspMenu для атрибута DataSourceID. Во время выполнения элемент управления меню связывается с элементом управления источником данных с таким идентификатором. Это необходимо для того, чтобы найти настраиваемый элемент управления вместо элемента управления по умолчанию. Настраиваемый элемент управления должен быть производным от класса HierarchicalDataSourceControl, поскольку именно этого элемент управления AspMenu ожидает от источника данных.
Возможна ситуация, когда для одного замещаемого элемента управления имеется несколько компонентов. Для разрешения конфликтов в каждом компоненте необходимо указать порядковый номер для его варианта замены, чтобы определить порядок следования вариантов. Во время выполнения замещаемый элемент управления получает группу элементов управления, объявленных на уровне фермы серверов, веб-приложения, семейства веб-сайтов или веб-сайта. Элемент управления с наименьшим порядковым номером добавляется в дерево элементов управления. При наличии нескольких элементов управления выбор конкретного из них будет произвольным.
В примере разметки для элемента управления Contoso.NavigationDataSource значение атрибута Sequence равно 50. Хотя порядковый номер элемента управления источником данных по умолчанию в разметке не указывается, можно с уверенностью предположить, что он будет больше 100. Если элемент управления Contoso является единственным вариантом замены, он заменит источник данных по умолчанию.
См. также
Задачи
Настройка элемента управления Delegate
Настройка отображение меню быстрого запуска
Концепции
Элемент управления Delegate (Control Templatization)
Совместное использование верхней панели ссылок разными сайтами