【问题标题】:Replace the Default Page in a SharePoint WebSite替换 SharePoint 网站中的默认页面
【发布时间】:2015-07-01 15:55:13
【问题描述】:

我被要求在 SharePoint 2007 团队网站集中以编程方式执行以下操作:

  • 使用 OOTB 空白网站模板创建网站。 (请注意,出于项目特定原因,我们不使用自定义网站模板。)
  • 在创建的网站上激活发布功能
  • 激活许多其他自定义功能(用于列表等)
  • 使用指定的页面布局(使用 webparts 配置)创建页面并将其用作默认页面。

我已经成功完成了前三个步骤,但我卡在了第四步。我可以通过 SharePoint API 轻松创建新的发布页面,但是如何用这个新页面覆盖默认页面?或者我可以简单地修改网络,使新页面成为该网站的默认页面?任何建议将不胜感激。

更新

代码必须在单击按钮时运行,而不是在功能事件接收器中运行

【问题讨论】:

  • 能否请您添加您已决定不想使用网站模板的信息,谢谢。
  • 对于它的价值,我们在历史上遇到了建议方法的问题。具体来说,不在页面列表中的 .aspx 文件并不总是按预期运行。祝你好运!

标签: web-part publishing-site publishing-page feature-activation


【解决方案1】:

我遇到了Josh Gaffey 的这个link,它描述了如何为发布站点设置欢迎页面。

我使用的代码是:

... // Create publishing page

if (bPageCreated)
{
    using (SPSite site = new SPSite(p_sSubSiteUrl))
    {
        using (SPWeb web = site.OpenWeb())
        {
            PublishingWeb publishingWeb = null;

            if (PublishingWeb.IsPublishingWeb(web))
            {
                publishingWeb = PublishingWeb.GetPublishingWeb(web);
                SPFile homePageFile = web.GetFile("Pages/" + sPageName + ".aspx");
                publishingWeb.DefaultPage = homePageFile;
                homePageFile.Publish("Page set as default welcome page by " + SPContext.Current.Web.CurrentUser.LoginName);
                publishingWeb.Update();
                web.Update();
            }
        }
    }
}

感谢 Josh 提供的解决方案。我已经测试了上面的代码,它可以工作。

此外,更改空白网站的默认页面的解决方案略有不同:

using (SPSite site = new SPSite(p_sSubSiteUrl))
{
    using (SPWeb web = site.RootWeb())
    {
        SPFolder rootFolder = web.RootFolder;
        rootFolder.WelcomePage = "login.aspx";
        rootFolder.Update();
    }
}

这来自Peter Tane 的article,我没有亲自测试过。

【讨论】:

    【解决方案2】:

    将页面添加到您网站的页面库中,将其命名为 HomePage.aspx。添加您需要的任何 webpart 等。然后,在站点的站点设置 (_Layouts/AreaWelcomePage.aspx) 中将 url 设置为指向您的自定义主页。现在,当有人输入您网站的 url(即http://mycoolportal.company.local)时,IIS / SharePoint 会将浏览器指向新的自定义主页。

    要完成,将内容编辑器 Web 部件添加到原始 Default.aspx 并添加一些 Javascript 以将用户重定向到新的自定义页面。 (这适用于例如在他们的收藏夹中有http://mycoolportal.company.local/default.aspx 或在浏览器中手动输入完整网址的用户)。

    编辑:

    来自here

    using(SPSite siteCollection = new SPSite("http://yourserver")) 
    { 
      SPWeb targetWeb = siteCollection.AllWebs["YourWebName"]; 
      SPFile newWelcomePage = null; // Change the code here to set the SPFile object to your new welcome page
    
      if(PublishingWeb.IsPublishingWeb(targetWeb)) 
      { 
         PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(targetWeb); 
         publishingWeb.DefaultPage = newWelcomePage; // this sets the new welcome page 
         publishingWeb.Update(); 
      }
    }
    

    【讨论】:

    • 科林,很抱歉,但在要求编程解决方案而不是手动操作时,这个问题很清楚。 -1
    • 您可以通过站点设置页面执行的任何操作,都可以在代码中执行。发布功能的 WelcomePageUrl 属性(参见此处:sharepointnutsandbolts.com/2007/08/…)可用于设置 SPWeb 的主页)..
    • Colin,如果您要更新答案以包含指向显示相关代码的文章的链接,或者在答案中包含代码,我将非常乐意删除反对票。在此之前,您的回答与所提出的问题无关。
    【解决方案3】:

    使用您的站点定义创建功能。包含自定义的 default.aspx

    您可以在站点定义中的页面上添加额外的 Web 部件。确保在站点上启用了包含 Web 部件的功能。我已经做了很多次了,没有任何问题。

    如果您不喜欢在网站定义中这样做。您还可以使用“SPFeatureReceiver”处理该功能的事件。

    此 FeatureActivated 事件在功能激活后触发。在那里你可以发挥你的 C# 魔法。

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
       { 
       //DO YOUR THING 
       }
    

    【讨论】:

    • 您好 W0ut,感谢您的回答,但我们正在努力避免针对这种特殊情况使用事件接收器。
    • 感谢您的回答。通过引用您的代码,我现在也遇到了相同类型的问题。
    【解决方案4】:

    您可以创建自定义站点模板,并在自定义 onet.xml 文件中创建自定义默认页面。

    <Modules>
    <Module...>
    <File Url="default.aspx"...>
    

    【讨论】:

    • 马格努斯,不!我们已经走这条路了,虽然我们能够使用指定的页面布局创建新站点和默认页面,但它会导致其他问题。因此,我们将采用上述方式以编程方式配置网站。
    • 好的,抱歉。出于某种原因,我似乎错过了您问题中的那一部分。
    • Magnus,抱歉,忘了说“谢谢!”花时间发布答案。
    【解决方案5】:

    我创建了一个批处理作业来替换空白网站中的 default.aspx 页面。请看下面的代码。

    private static string RootSite = ConfigurationManager.AppSettings.Get("RootSite");
    private static string WebSite = ConfigurationManager.AppSettings.Get("WebSite");
    private static string OriginalFile = ConfigurationManager.AppSettings.Get("OriginalFile");
    private static string BackupFileName = ConfigurationManager.AppSettings.Get("BackupFileName");
    private static string NewFileUrl = ConfigurationManager.AppSettings.Get("NewFileUrl");
    
    static void Main(string[] args)
    {
    
        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            using (SPSite site = new SPSite(RootSite))
            {
                using (SPWeb web = site.OpenWeb(WebSite))
                {
                    SPFile originalFile = web.GetFile(OriginalFile);
                    originalFile.MoveTo(BackupFileName);
                    SPFile newFile = web.GetFile(NewFileUrl);
                    newFile.CopyTo(OriginalFile);
                    SPFolder rootFolder = web.RootFolder;
                    rootFolder.WelcomePage = OriginalFile;
                    rootFolder.Update();
                }
    
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 2017-01-30
      相关资源
      最近更新 更多