I have moved to http://blogs.msdn.com/mahuja
From now on, all new posts will be posted on my "new" MSDN blog http://blogs.msdn.com/mahuja.
Please update your feeds.
The learnings on technologies I work upon ...
From now on, all new posts will be posted on my "new" MSDN blog http://blogs.msdn.com/mahuja.
Please update your feeds.
Posted by Madhur at 5:50 PM 6 comments
To give some background for beginners, whenever we click Edit Page on Site Actions menu,
the pages switches into a different display mode called Design Mode. Its not a feature of
Sharepoint, but ASP.NET 2.0 Webparts Framework.
WebPartManager
control provides a programmatic interface, making it possible to switch the Web Part Page between browse, design, and edit display modes.For example, to programmatically switch the current page into design mode, you can simply add a link control with an event handler that sets the DisplayMode
property to DesignDisplayMode
.
Although this would work technically, but it would not give up the visible changes to page, like visibilty of Page Editing toolbar, webpart zones etc.
WebPartManager1.DisplayMode = WebPartManager.DesignDisplayMode;
This visual magic is done by lot of Javascript which is executed when we click Edit Page on Site Actions menu.
To build this link control, we need to figure out the javascript code which causes this behaviour.
This would be present in default.master. If we open Site Actions menu and do the View Source on IE.
Here is the code of our interest :
<td class="ms-siteactionsmenu" id="siteactiontd">
<span><a href="javascript:MSOLayout_ToggleLayoutMode();">Edit Page</a></span>
As you must have figured out, its the MSOLayout_ToggleLayoutMode()
function which does all the magic of turning the current page into Edit page. This javascript also calls the server side code which executes this statement
WebPartManager1.DisplayMode = WebPartManager.DesignDisplayMode;
//(This can also be demonstrated, but its beyond scope)
Armed with this knowledge, we can build a simple webcontrol which we will switch the page into Edit mode and vice versa.
Below is the code for the same. Its the simplest webcontrol you will see ever.
using System;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.UI;
namespace SPUtil
{
public class SPEditMode:System.Web.UI.WebControls.WebControl
{
HtmlAnchor btnLink;
protected override void CreateChildControls()
{
WebPartManager wp = WebPartManager.GetCurrentWebPartManager(Page);
const string url="javascript:MSOLayout_ToggleLayoutMode();";
btnLink = new HtmlAnchor();
if (wp.DisplayMode == WebPartManager.BrowseDisplayMode)
btnLink.InnerText = "Edit Page";
else if (wp.DisplayMode == WebPartManager.DesignDisplayMode)
btnLink.InnerText = "Exit Edit Mode";
else
btnLink.Visible = false;
btnLink.HRef = url;
Controls.Add(btnLink);
base.CreateChildControls();
}
}
}
I have used HtmlAnchor
rather than LinkButton
or SPLinkButton
since its lightweight on the server and We are not performing any special processing which is present in server controls.
One point to be worth noting: This link would be visible to all including visitors. For used in practical scenarious, the control should be hidden for other than members and Administrators.
I was using this link in user's MySite and hence I did not have that case :)
Posted by Madhur at 7:43 PM 1 comments