Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Determine display mode of sharepoint page

I have this question many times and bored while trying to find good solution. Dont understand why microsoft not include method which can easy determine mode of display page: "normal display" or in "design mode". It have many advices of check different variables, but it cant uniquely say that page in design on different type of page(webpart page and wiki page) and on postback or not.

Is finally tired me and i write this:

    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;
    }

Does anybody have better solution?

like image 718
gdbdable Avatar asked Feb 28 '12 08:02

gdbdable


People also ask

How do I change the page view in SharePoint?

You can change a page's Page Layout after you have logged in and are editing the page (click the Edit icon or click on the Site Actions dropdown menu and select Edit Page). In the ribbon, click on the Page tab and click the Page Layout dropdown. Select the layout you want and wait for the page to refresh.


2 Answers

you have 2 case to detect the page mode:

In case you are using a team site :

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

in case you are using a publishing site:

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
  }
like image 108
Ahmad Hindash Avatar answered Oct 13 '22 11:10

Ahmad Hindash


if your work in WebpartPage than below code work for me

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

    }
like image 45
Jignesh Rajput Avatar answered Oct 13 '22 11:10

Jignesh Rajput