2017-04-20 47 views
0

我想刪除元標記<meta name="Generator" content="Sitefinity 9.1.6110.0 SE \">,我已經通過在母版頁中寫入以下代碼塊來實現瞭解決方案。如何刪除Sitefinity默認生成的名爲「Generator」的元標籤,其中包含版本信息?

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

最好的方法是訂閱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); 
     } 
} 
0

SF Version meta tag論壇主題好像你可以重寫System.Web.UI.Adapters.ControlAdapter類,並添加自己的邏輯meta標籤渲染。看最後一篇文章。

如果這不適合你,你可以考慮緩存生成的頁面,所以你不需要再次替換和重新渲染同一頁面。

相關問題