为了简化我的SharePoint环境,我希望有一个中央和单一位置,其中存储了所有母版页,因此我希望直接从_layouts目录引用母版页文件。
我将文件添加到“\ LAYOUTS \ MyMasterPages”目录中,然后更新SPWeb对象以使用该路径:
web.MasterUrl = "/_layouts/MyMasterPages/newdefault.master"
但是当我去网站时,我得到了:
引用的文件 '/_layouts/MyMasterPages/newdefault.master' 不允许在此页面上。在 System.Web.UI.TemplateParser.ProcessError(字符串 消息) System.Web.UI.BaseTemplateParser.GetReferencedType(VirtualPath virtualPath,Boolean allowNoCompile)
在 System.Web.UI.PageParser.ProcessMainDirectiveAttribute(字符串 deviceName,String name,String value, IDictionary parseData)at System.Web.UI.TemplateParser.ProcessMainDirective(IDictionary的 mainDirective)
我假设这可能是由于信任级别的安全策略和CAS配置,但我不完全确定。有没有办法允许这种在整个企业中使用母版页的集中方式,还是我坚持使用/ _catalog /虚拟路径?
答案 0 :(得分:3)
这对我有用:
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
this.MasterPageFile = "path to masterpage";
}
建议: How to use the site's masterpage from a _layout SharePoint page?
答案 1 :(得分:0)
我的理解(但我不知道为什么)是Master Pages需要位于每个网站集的MasterPage库中。
由于您需要将这些程序包部署到服务器场中的每个SharePoint服务器(前端,应用程序,数据库等),我认为该要求要么与群集相关,要么与数据库和重影相关。
在任何一种情况下,请务必使用自定义功能作为部署母版页的方式,而不管您的服务器场大小。
我理解想要以自己的方式使用SharePoint做事,虽然我通常会考虑这种想法,但过去一年的痛苦让我觉得生活在推荐的SharePoint边界内是最好的方法。去。
答案 2 :(得分:0)
SharePoint网站使用的母版页必须位于母版页库中。据我所知,这是SharePoint的一项硬性要求。
这为您提供了比您想象的更多的好处。这允许您使用SharePoint设计器实时更改母版页,并且只有您可以看到更改。一旦母版页签入并作为主要版本发布,公众就可以看到更改。您还在母版页上有版本历史记录。
我理解你的痛苦,我和你一样处于同样的境地。我学到的是:不要与平台作斗争,只需在其中工作。