У меня этот вопрос много раз и мне скучно, когда я пытаюсь найти хорошее решение.Не понимаю, почему Microsoft не включает метод, который может легко определить режим отображения страницы: «нормальное отображение» или «режим дизайна».У него есть много советов по проверке различных переменных, но он не может однозначно сказать, что страница в дизайне на страницах разного типа (страница веб-части и страница вики) и при обратной передаче или нет.
Наконец-то я устал, и я пишу это:
public static bool IsDesignTime()
{
if (SPContext.Current.IsDesignTime) return true;
if (HttpContext.Current.Request.QueryString["DisplayMode"] != null)
return true;
var page = HttpContext.Current.Handler as Page;
if(page == null) return false;
var inDesign = page.Request.Form["MSOLayout_InDesignMode"];
var dispMode = page.Request.Form["MSOSPWebPartManager_DisplayModeName"];
var wikiMode = page.Request.Form["_wikiPageMode"];
var we = page.Request.Form["ctl00$PlaceHolderMain$btnWikiEdit"];
if (inDesign == null & dispMode == null) return false; //normal display
if (we == "edit") return true; //design on wiki pages
if (page is WikiEditPage & page.IsPostBack & inDesign == "" & dispMode == "Browse" & wikiMode == "") return false; //display wiki on postback
if (inDesign == "" & dispMode == "Browse" & (wikiMode == null | wikiMode == "")) return false; //postback in webpart pages in display mode
if (inDesign == "0" & dispMode == "Browse") return false; //exiting design on webpart pages
return true;
}
У кого-нибудь есть лучшее решение?