如何删除默认包含版本信息的Sitefinity生成的名为“Generator”的元标记?

时间:2017-04-20 13:06:53

标签: c# asp.net sitefinity

我想通过在母版页中编写以下代码块来删除已经实现了解决方案的元标记<meta name="Generator" content="Sitefinity 9.1.6110.0 SE \">

 protected override void Render(HtmlTextWriter writer)
 {
   using (HtmlTextWriter htmlwriter = new HtmlTextWriter(new System.IO.StringWriter()))
     {
       base.Render(htmlwriter);
       string html = htmlwriter.InnerWriter.ToString();
       html = html.Replace("<meta name=\"Generator\" content=\"Sitefinity 8.0.5710.0 PE\" />", "");
       writer.Write((html));
     }
}

但有人建议我,由于整个页面的内存渲染,它不是一个合适的解决方案,默认母版页会将整个页面呈现为一个导致性能开销的字符串。如果要删除标题,可以执行此操作 在ASP.NET页面对象级别上。所以我想要一个其他的解决方案,如所建议的,任何人都可以提供其他解决方案吗?(性能有效的解决方案)

2 个答案:

答案 0 :(得分:2)

最好的方法是订阅IPagePreRenderCompleteEvent事件并删除此控件。 global.asax代码的一个例子

protected void Application_Start(object sender, EventArgs e)
{
        Telerik.Sitefinity.Abstractions.Bootstrapper.Initialized += Bootstrapper_Initialized;
}
protected void Bootstrapper_Initialized(object sender, Telerik.Sitefinity.Data.ExecutedEventArgs args)
{
        if (args.CommandName == "Bootstrapped") {
            EventHub.Subscribe<IPagePreRenderCompleteEvent>(this.OnPagePreRenderCompleteEventHandler);
        }
}
private void OnPagePreRenderCompleteEventHandler(IPagePreRenderCompleteEvent evt)
{
        if (!evt.PageSiteNode.IsBackend)
        {
            var controls = evt.Page.Header.Controls;
            System.Web.UI.Control generatorControl = null; 
            for(int i=0;i< evt.Page.Header.Controls.Count;i++)
            {
                var control = evt.Page.Header.Controls[i];
                if ((control is HtmlMeta) && (control as HtmlMeta).Name == "Generator") {
                    generatorControl = control;
                }
            }
            evt.Page.Header.Controls.Remove(generatorControl);
        }
 }

答案 1 :(得分:0)

每个SF Version meta tag论坛帖子似乎可以覆盖System.Web.UI.Adapters.ControlAdapter类并为元标记呈现添加自己的逻辑。见最后一篇文章。

如果这对你不起作用,你可以考虑缓存生成的页面,这样你就不需要再次替换和重新渲染同一页面。