2010-10-22 47 views
1

我正在使用webforms ASP.NET和masterpages。我想爲<title>標記添加LANG屬性。 ASP.NET自動生成標題標籤。我試着將我自己的標籤與標識和RUNAT =「服務器」,這樣的:如何給標題添加屬性

<title id="titleBlock" runat="server"></title> 

做這件事時,我可以設置像沒有任何錯誤下面的屬性。

titleBlock.Attributes.Add("lang", "it"); 

然而,ASP.NET徹底打掉我<title>標籤,並把它在自己沒有我的LANG屬性。有什麼辦法可以做到這一點?非常感謝。

+0

您是否使用母版頁?主頁面/內容頁面是否覆蓋了這個? – Oded 2010-10-22 18:50:26

+0

@提供,是的,我正在使用masterpages(我的問題的第一句話是這麼說的)。內容頁面通過Page.Title =「...」設置標題。我在我的問題(我添加了自己的標題標籤)中顯示的代碼直接在主頁的代碼隱藏中完成。 – 2010-10-22 19:32:42

回答

3

這是因爲HtmlTitle控制不提供RenderAttributes實施。在這種情況下,你不能(輕易地)控制子控件,但還有另一種選擇。 控制適配器的功能不僅限於WebControls - HtmlControls的概念也是extends

掉落在* .browser文件下App_Browsers文件以下目錄網站的:

<browsers> 
    <browser refID="Default"> 
    <controlAdapters> 
     <adapter 
     controlType="System.Web.UI.HtmlControls.HtmlTitle" 
     adapterType="HtmlTitleAdapter" 
     /> 
    </controlAdapters> 
    </browser> 
</browsers> 

下面是對應的適配器的原型:

using System.Web; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 

public class HtmlTitleAdapter : System.Web.UI.Adapters.ControlAdapter 
{ 
    protected override void Render(System.Web.UI.HtmlTextWriter writer) 
    { 
     HtmlTitle title = Control as HtmlTitle; 

     writer.WriteBeginTag("title"); 
     title.Attributes.Render(writer); 
     writer.Write(">"); 

     if (title.Text != null) 
      writer.Write(title.Text); 

     writer.WriteEndTag("title"); 
    } 
} 

注意,內部渲染HtmlTitle的實現有所不同:

protected internal override void Render(HtmlTextWriter writer) 
{ 
    writer.RenderBeginTag(HtmlTextWriterTag.Title); 
    if (this.HasControls() || base.HasRenderDelegate()) 
    { 
     this.RenderChildren(writer); 
    } 
    else if (this._text != null) 
    { 
     writer.Write(this._text); 
    } 
    writer.RenderEndTag(); 
} 

我不知道標題何時會有子元素,所以我不認爲這是一個問題。

希望這會有所幫助。

順便說一句,使用jQuery在客戶端添加此屬性會容易得多。

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("title").attr("lang", "it"); 
    }); 
</script> 
+1

它的工作原理 - 美妙的解決方案,謝謝。我知道這對於jQuery來說很容易,但我這樣做的主要原因是搜索引擎,因此他們能夠識別頁面上幾個元素(標題標記和幾個DIV)中使用的語言。搜索引擎不會運行JS,所以需要直接從服務器輸出LANG屬性。 Thx再次。 – 2010-10-24 06:22:05