Monthly Archives: December 2013

Embedding Sandbox Web Parts into Page Layouts and Master Pages

Note – this is applicable to both SharePoint 2010 and SharePoint 2013 .. and despite rumours of “The Sandbox is deprecated” many features in SharePoint 2013 rely on the Sandbox so I don’t see it going anywhere for the time being

This is something that I have been told many times, it is not possible to embed a server control developed in the Sandbox onto a Page Layout or Master Page because you can’t add the appropriate Tag Prefix to the header.

If you consider the standard way of doing this for a Farm / Full Trust solution:

<% @Register TagPrefix="MJH" Namespace="MJH.Examples.WebControls" Assembly="MJH.Examples, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16e05f568fffc0d1" %>

<!-- Custom Web Control-->
<MJH:SampleCustomControl runat="server" />

In the sandbox we obviously can’t reference the Assembly in the same way because (a) it isn’t deployed to the GAC / BIN folders and (b) it runs in a completely different process so won’t be JIT compiled by the .Net Framework… but there is a solution!

Microsoft.SharePoint.WebPartPages.SPUserCodeWebPart allows you to embed a Web Part from an assembly running in the Sandbox.

<!-- custom sandbox web part -->
<WebPartPages:SPUserCodeWebPart 
      runat="server" 
      AssemblyFullName="MJH.Examples.Sandbox, Version=1.0.0.0, Culture=neutral, PublicKeyToken=60d6fc7a560ae45c" 
     SolutionId="4faf8ff6-36ea-406f-af25-4d89472a41e1" 
     TypeFullName="MJH.Examples.Sandbox.WebParts.SampleCustomControl" >
</WebPartPages:SPUserCodeWebPart> 

You still need the “AssemblyFullName” attribute. I’ve found the easy way to get this is to add a feature receiver to a Feature in Visual Studio then copy-paste it from the Manifest in Visual Studio (which contains the full text that you need).

So thats it! Happy coding