确定共享点页面的显示模式

时间:2012-02-28 08:54:35

标签: c# asp.net sharepoint-2010

在尝试找到好的解决方案时,我多次提出这个问题并感到无聊。 不明白为什么微软不包括可以轻松确定显示页面模式的方法:“正常显示”或“设计模式”。 它有许多检查不同变量的建议,但是它不能在不同类型的页面(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;
    }

有没有人有更好的解决方案?

5 个答案:

答案 0 :(得分:12)

你有2个案例来检测页面模式:

如果您使用的是团队网站:

    if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.Edit)
    {
        ltr.Text = "EditMode2";
    }
    else
    {
        ltr.Text = "ViewMode";
    }

如果您使用的是发布网站:

if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.Display)
  {
   // your code to support display mode
  }
  else // Microsoft.SharePoint.SPContext.Current.FormContext.FormMode = SPControlMode.Edit
  {
   // your code to support edit mode
  }

答案 1 :(得分:5)

如果您在WebpartPage中的工作比下面的代码更适合我

 WebPartManager mgr = this.WebPartManager;
 if (mgr.DisplayMode == WebPartManager.EditDisplayMode)
    {
        // logic when in Edit Mode
    }
 else
    {

    }

答案 2 :(得分:3)

考虑到所有场景,我很难在Sharepoint 2013中获得任何这些答案。我也无法让EditModePanel始终如一地工作。我在this article中找到了一个片段,似乎在我迄今为止尝试过的所有场景中都有效。

注意:这在Page_Init中不起作用,但可以在Page_Load中使用

var isPublishing = SPContext.Current.FormContext.FormMode != SPControlMode.Invalid;
var wpDMode = WebPartManager.GetCurrentWebPartManager(Page).DisplayMode.Name;
var isEditing = isPublishing
     ? SPContext.Current.FormContext.FormMode != SPControlMode.Display
     : (wpDMode.Equals("Edit") || wpDMode.Equals("Design"));

然后,您只需查看isEditing了解您的情况。

答案 3 :(得分:2)

请尝试此代码..

if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.Display)
  {
   // your code to support display mode
  }
  else // Microsoft.SharePoint.SPContext.Current.FormContext.FormMode = SPControlMode.Edit
  {
   // your code to support edit mode
  }

答案 4 :(得分:0)

处理SharePoint页面模式。

这对我有用,我通过使用以下几行解决了我的关键问题。

if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.Edit)
{
    alert.Text = "EditMode2";
}
else
{
    alert.Text = "ViewMode";
}