Все видели диалоговые окна в SharePoint 2010. Но не все знают, как неправильно они работают!
Эти диалоговые чаще всего используются в списках и библиотеках – добавление, просмотр и редактирование.
В 2007 версии диалоговых окон не было и это было не очень хорошо. Постоянная перезагрузка страниц при просмотре элементов в списках, особенно, когда список был разбит по страницам, а возврат с Н-ной страницы после просмотра деталей записи приводил не назад на Н-ную страницу, а на первую – это неправильно.
В 2010 все хорошо. На первый взгляд.
Разработчики даже оставили возможность включать и отключать диалоговые окна в дополнительных параметрах списков и библиотек:

Даже если диалоговые окна включены, всегда можно в списке открыть ссылку в новом окне (CTRL+Click), тогда она откроется без диалога. Это достигается за счет использования в HTML как ссылки на страницу, так и JavaScript события onclick.

Вот как страница выглядит без диалога:

Адрес страницы был такой:
http://portal/Lists/Tasks/DispForm.aspx?ID=22&ContentTypeId=0x01080033DF2A7E09B15841AB447F1CE0E6D2DC
А теперь трюк – добавим в конец адреса строчку - &isDlg=1

Чувствуете разницу? Исчезло меню быстрого запуска, Действия сайта, закладка Обзор.
Но не тут-то было. Если посмотреть исходный код веб страницы в браузере, становится понятно, что вся разметка на месте, но она скрыта при помощи стилей CSS.
При этом все скрытые элементы выглядят примерно так:
<div id="s4-titlerow" class="s4-pr s4-notdlg s4-titlerowhidetitle">
В классах указан стиль s4-notdlg.
Через средства разработчика MSIE (F12) можно посмотреть, откуда появился стиль:

А пришел он из файла dlgframe.css

Встает вопрос, что за стиль .ms-dialog ? Оказывается, он прописан в тэге <html>.

Что получается? Получается, что что-то проверяет наличие в строке запроса параметра isDlg и добавляет необходимые стили на страницу. Сама по себе мастер страница этого не делает, поскольку ни от какого класса SharePoint не унаследована.
Я открыл .NET Reflector и стал искать, кто за что отвечает. Выяснилось, что за все отвечает элемент CssLink:
<SharePoint:CssLink runat="server" Version="4"/>
А именно:
private const string DialogV4CssFile = "dlgframe.css";
private void SetupDialogCSS() {}
А за выяснение открыта ли страница в диалоговом окне отвечает SPContext:
public bool IsPopUI
{
get
{
return (this.m_context.Request.QueryString["IsDlg"] != null);
}
}
Выводы
При дизайне страниц не удаляйте элемент CssLink или делайте это с умом.
Если Вы не хотите появления нежелательных элементов из мастер страницы в диалоговых окнах, оборачивайте их стилем s4-notdlg
Ну и наконец: Не используйте эти стили! Кому они нужны? Это кто-то в команде SharePoint явно поленился написать качественный код. Зачем генерировать ненужную разметку, которая прячется CSS стилями? Ведь это сказывается на производительности и сетевом трафике. Лучше сделать свой элемент управления по подобию UIVersionedContent, в который Вы упакуете все ненужные в диалогах элементы. А в коде этого элемента напишете условие с использованием SPContext.Curent.IsPopUI
Удачи в дизайне!
Курс Дизайн порталов SharePoint 2010 - http://www.sharepoint2010.ru/page/iw1005.aspx