我有这个问题很多次,无聊,而试图找到很好的解决方案。 不明白为什么微软不包括可以轻松确定显示页面模式的方法:“正常显示”或“设计模式”。 它有很多关于检查不同变量的建议,但它不能唯一地在不同类型的页面(webpart页面和wiki页面)上设计页面并且在回发与否之间。确定共享点页面的显示模式
是终于厌倦了我,我写这篇文章:
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;
}
是否有人有更好的解决办法?
在发布访问page.Request属性的页面失败并出现异常。 (HttpContext.Current.Request可以用来代替 – 2013-06-19 12:20:43
对于维基页面,只有wiki页面,你的代码给了我解决方案:page.Request.Form [“ctl00 $ PlaceHolderMain $ btnWikiEdit”] ==“edit”。FormMode采用非wiki页面的照顾。 – CigarDoug 2016-05-17 12:14:17