Веб-контрол для отображения объектов разворачиваемыми группами, сформированными по значению мастера. Объекты без мастера помещаются в категорию Остальное. Для отображения каждой группы используется контрол ObjecTileView.

Интерфейс

Методы

Сигнатура Описание
protected override void OnLoad(EventArgs e) Перегрузка метода класса WebControl, вызывается при загрузке контрола
protected override void RenderContents(HtmlTextWriter writer) Перегрузка метода класса WebControl, используется для рендеринга контрола при размещении на веб-форме
protected override IEnumerable<SсriptDesсriptor> GetSсriptDesсriptors() Перегрузка метода класса SсriptControl. Метод для получения дескрипторов скриптов, используемых контролом
protected override IEnumerable<SсriptReference> GetSсriptReferences() Перегрузка метода класса SсriptControl. Метод для получения ссылок на скриптовые ресурсы, используемые контролом.
public static string GetMarkup(string guid, int pageNum) Статический метод, возвращающий строку с разметкой нужной страницы. Вызывается веб-сервисом MasterExpanderService при обработке ajax-запросов. Настройки берутся из сессии по guid‘у
public static string GetTileViewMarkup(string guid, int index) Статический метод, возвращающий строку с разметкой конкретного ObjectTileView. Вызывается веб-сервисом MasterExpanderService при обработке ajax-запросов разворачивания какой-либо категории. Настройки берутся из сессии по guid‘у. Внутри метода происходит конструирование экземпляра ObjectTileView и получение его разметки

Свойства

Свойства, которые по именам совпадают со свойствами ObjecTileView, просто передаются конкретному экземпляру этого контрола при его создании, про них можно почитать в статье ObjectTileView. Значение TilesPerPage будет записано в ItemsPerPage каждого ObjectTileView. Остальные свойства перечислены ниже:

Название Тип Описание
MastersPerPage uint Количество категорий на одной странице MasterExpander
MasterName string Имя атрибута объектов, хранящего мастера, используемого для группировки
MasterAttributeName string Имя атрибута мастера, по которому производится разделение. Если, например, группировать объекты по названию темы, то MasterName будет равен Тема, а MasterAttributeName - Название
SectionHeaderUserContentGenerator ICSSoft.STORMNET.Web.AjaxControls.<br>MasterExpanderUserContentDelegate Используется для задания функции, которая будет генерировать пользовательское содержимое в заголовках каждой категории. Подробнее о типе делегата MasterExpanderUserContentDelegate написано ниже.

MasterExpanderUserContentDelegate

    public delegate string MasterExpanderUserContentDelegate<in TData>(
        MasterExpander.MasterExpanderSettings settings,
        TData data);

Делегат, который предполагается использовать для передачи пользовательских функции генерации содержимого в контрол MasterExpander. В качестве параметров функция должна принимать настройки MasterExpander (типа MasterExpander.MasterExpanderSettings) и какие-нибудь данные, зависящие от контекста использования. Ниже приведен пример реализации функции для добавления разметки в заголовок категории MasterExpander, где в качестве “данных” выступает индекс категории, соответственно, TData конкретизируется в int.

protected static string GenerateSectionHeaderContent(
    MasterExpander.MasterExpanderSettings settings,
    int index)
{
    return string.Format("<p>Категория №{0} из {1}</p>", index, 
    settings.MastersValues.Count);
}

Web.config

Для включения веб-сервиса MasterExpanderService.asmx необходимо добавить запись в Web.config:

Для IIS6

<configuration>
...
<system.web>
    ...
    <httpHandlers>
        ...
        <add verb="*" path="MasterExpanderService.asmx" 
        validate="false" type="AjaxControls.MasterExpanderHandlerFactory" />
        ...  
    </httpHandlers>
    ...
  </system.web>
  ...
</configuration>

Для IIS7

<configuration>
...
<system.webServer>
    ...
    <handlers>
        ...
        <add name="MasterExpanderHandler" path="MasterExpanderService.asmx"
        verb="*" type="AjaxControls.MasterExpanderHandlerFactory" 
        resourceType="Unspecified" preCondition="integratedMode" />
        ...  
    </handlers>
    ...
  </system.webServer>
  ...
</configuration>

Вид контрола

CSS

Для изменения вида контрола можно переопределить CSS-атрибуты для классов:

  • Внешний див контрола: div.me-masterName-expander
  • Заголовок категории: div.me-section-header
  • Разворачивающийся див (содержащий ObjectTileView): div.me-expandable
  • Область выбора страницы: div.me-page-select-area
  • Кнопка выбора страницы: a.me-page-button
  • Кнопка выбранной страницы: a.me-selected-page-button
  • Свойства для ObjectTileView также можно посмотреть в соответствующей статье ObjectTileView.