Пропадающий контрол выбора представления списка
В SharePoint 2010 при просмотре содержимого списка есть одна очень спорная особенность: если на странице расположены более одной веб-части, то контрол этот уходит по-английски. В этом посте я расскажу почему это происходит и как я решаю эту проблему.
ListTitleViewSelectorMenu
Сам контрол называется ListTitleViewSelectorMenu и расположен он на странице [SharePoint Root]\TEMPLATE\Pages\viewpage.aspx. Открываем сборку Microsoft.SharePoint.dll в рефлекторе и видим переопределенное свойство Visible:
Причина такого поведения ясна: если на странице лежат два контрола, отображающих содержимое из различных списков, то понять представления какого из них отображать пользователю невозможно. Но этот сценарий маловероятен (ведь речь идет о странице просмотра элементов конкретного списка). У меня на проекте был случай более приближенный к реальности: поверх списка располагалась веб-часть, предназначенная для фильтрации данных. И фильтровать данные, отталикаваясь только от представления по умолчанию пользователи не хотели.
Свой контрол
Пришлось писать свой контрол и заменять им стандартный на странице viewpage.aspx. Сам класс ListTitleViewSelectorMenu оказался запечатанным пришлось наследоваться от класса ViewSelectorMenu и дублировать функционал стандартного контрола.
Проблема оказалась в свойстве PageInDesignMode
Оно обращается к внутреннему свойству SPWebPartManager.InDesignMode. Каюсь: я просто закоментировал эту строку за неимением времени разбираться подробнее.