将新的子网站应用于根网站时,刷新子网站的母版页

本文关键字:网站 刷新 母版页 应用于 | 更新日期: 2023-09-27 17:59:30

让我公开我的问题:我有一个根网站,有一个主页,还有许多子网站。有些使用根网站母版页(通过继承),有些不使用根网站母版页。

当我用这样的功能事件接收器更新根站点MP时:

SPWeb w = ((SPSite)properties.Feature.Parent).OpenWeb();
Uri masterUri = new Uri(w.Url + "/_catalogs/masterpage/AdventureWorks.master");
//MasterPage used by publishing pages
w.CustomMasterUrl = masterUri.AbsolutePath;
w.AllowUnsafeUpdates = true;
w.Update();

更新根网站的母版页,但不更新从根网站母版页继承的子网站!当我转到子网站的网站母版页设置页时,"从此网站的父网站继承网站母版"单选按钮被选中。

当我从"网站母版页设置"页面应用新的母版页时,我没有遇到这个问题。

有关信息:我在发布网站中的根网站以及"SharePoint Server发布基础结构"answers"SharePoint Server Publishing"功能正在运行。

我错过什么了吗?

将新的子网站应用于根网站时,刷新子网站的母版页

一个月后仍然没有响应:/所以我想没有机制更新子网站的所有母版页。所以我更新了功能激活的事件接收器,如下所示:

using (SPWeb w = ((SPSite)properties.Feature.Parent).OpenWeb())
        {
            Uri masterUri = new Uri(w.Url + "/_catalogs/masterpage/AdventureWorks.master");
            w.CustomMasterUrl = masterUri.AbsolutePath;
            w.AllowUnsafeUpdates = true;
            w.Update();
            foreach (SPWeb ww in w.Site.AllWebs)
            {
                if (!ww.IsRootWeb)
                {
                    Hashtable hash = ww.AllProperties;
                    if (string.Compare(hash["__InheritsCustomMasterUrl"].ToString(), "True", true) == 0)
                    {
                        ww.CustomMasterUrl = masterUri.AbsolutePath;
                        ww.AllowUnsafeUpdates = true;
                        ww.Update();
                    }
                }
            }
        }

目标是测试每个子网是否继承了masterPage。如果是,我们必须更新CustomMasterUrl属性。

使用此设置根和所有子网站上的主页面:

        var web = site.RootWeb;
        web.MasterUrl = web.CustomMasterUrl = SPUtility.ConcatUrls(web.ServerRelativeUrl, "_catalogs/mymaster.master");
        web.Update();
        foreach (SPWeb subWeb in site.AllWebs)
        {
            using (subWeb)
            {
                if (subWeb.IsRootWeb) continue;
                var hash = subWeb.AllProperties;
                subWeb.MasterUrl = subWeb.CustomMasterUrl = web.MasterUrl;
                hash["__InheritsMasterUrl"] = "True";
                hash["__InheritsCustomMasterUrl"] = "True";
                subWeb.Update();
            }
        }