WSS-Seiten verwenden Masterseiten wie normale Webanwendungen. Wenn das Attribut MasterPageFile jedoch ein Token ist, wird der Wert auf "~ default.master" gesetzt. Dieses Token wird in der PreInit-Methode der Seite durch den tatsächlichen Verweis auf die Masterseite ersetzt.
Sie können den Wert von ~ default.master auf alles ändern, was Sie möchten. Aber eine bessere Lösung besteht darin, dieselbe Art von Aufgabe zu erledigen, die SharePoint leistet.
Ich habe meiner SharePoint-Website einen HttpHandler hinzugefügt. Der Handler hängt an die PreRequestHandlerExecute-Methode an und ändert den Wert des Masterseite-Dateiattributs, bevor SharePoint mit dem Rendern der Seite beginnt.
Fügen Sie eine Zeile in die Httpmodules Abschnitt der web.config, die wie folgt aussieht:
Dann eine Klasse wie folgt erstellen:
Namespace MyClassLibrary.Utility { public class MasterPageHttpModule: IHttpModule { public void Init (HttpApplication-Kontext) { context.PreRequestHandlerExecute + = neuer EventHandler (context_PreRequestHandlerExecute); }
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
bool useCustomMasterPages = Convert.ToBoolean(ConfigurationManager.AppSettings["ShowCustomMasterPages"].ToString());
if (useCustomMasterPages)
{
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null)
{
page.PreInit += new EventHandler(page_PreInit);
}
}
}
void page_PreInit(object sender, EventArgs e)
{
bool useThreeColumnMaster = Convert.ToBoolean(ConfigurationManager.AppSettings["UseThreeColumnMasterOnDefaultPage"].ToString());
try
{
Page page = sender as Page;
if (page != null && SPContext.Current != null)
{
string url = page.Request.Url.AbsolutePath.ToLower();
if (url.IndexOf("/public/") > -1)
{
if (url.IndexOf("sitemap.aspx") == -1)
{
page.MasterPageFile = "~/_catalogs/masterpage/edge_con.master";
}
else
{
page.MasterPageFile = "";
}
}
else if (url.IndexOf("default.aspx") > -1)
{
if (useThreeColumnMaster)
{
page.MasterPageFile = "~/_catalogs/masterpage/edge_con.master";
}
else
{
page.MasterPageFile = "~/_catalogs/masterpage/edge.master";
}
}
else if (url.IndexOf("sitemap.aspx") > -1)
{
//
// Sitemap pages should not have a master page
//
page.MasterPageFile = "";
page.Controls.Clear();
}
else if (url.IndexOf("/admin/") > -1)
{
page.MasterPageFile = "~/_catalogs/masterpage/edge.master";
}
else if (url.IndexOf("/member/") > -1)
{
page.MasterPageFile = "~/_catalogs/masterpage/edge.master";
}
else if (url.IndexOf("/supplier/") > -1)
{
page.MasterPageFile = "~/_catalogs/masterpage/edge.master";
}
else if (page.MasterPageFile == "~masterurl/default.master")
{
page.MasterPageFile = "~/_catalogs/masterpage/edge.master";
}
}
}
catch (Exception exception)
{
LogWriter logWriter = new LogWriter();
logWriter.WriteToLog("Could not set master page: " + exception.Message, LogType.MasterPage, DateTime.Now);
}
}
public void Dispose()
{
}
}
}
Jetzt sind Sie dynamisch eine mater Seite wählen.