2010-10-22 62 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