Определить режим отображения страницы sharepoint - PullRequest
5 голосов
/ 28 февраля 2012

У меня этот вопрос много раз и мне скучно, когда я пытаюсь найти хорошее решение.Не понимаю, почему 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;
    }

У кого-нибудь есть лучшее решение?

Ответы [ 5 ]

12 голосов
/ 12 ноября 2012

у вас есть 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
  }
5 голосов
/ 01 марта 2012

если ваша работа в WebpartPage, чем ниже код работает для меня

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

    }
3 голосов
/ 20 августа 2014

Мне было трудно заставить любой из этих ответов работать в Sharepoint 2013 с учетом всех сценариев.Я также не мог заставить EditModePanel работать последовательно.Я нашел фрагмент в этой статье , который, кажется, работает в каждом сценарии, который я пробовал до сих пор.

Примечание: Это не работает в 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 для ваших условий.

2 голосов
/ 29 февраля 2012

пожалуйста, попробуйте этот код ..

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
  }
0 голосов
/ 24 августа 2018

Обработка режимов страницы SharePoint.

Это работает для меня, я решил свою критическую проблему, используя строки ниже.

if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.Edit)
{
    alert.Text = "EditMode2";
}
else
{
    alert.Text = "ViewMode";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...