【问题标题】:How to add attribute to Title tag如何将属性添加到标题标签
【发布时间】:2010-10-22 18:49:29
【问题描述】:

我正在使用带有母版页的 webforms ASP.NET。我想将 LANG 属性添加到 <title> 标记。 ASP.NET 自动生成一个标题标签。我尝试使用 ID 和 runat="server" 添加自己的标签,如下所示:

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

这样做时,我可以设置如下属性而不会出现任何错误。

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

但是,ASP.NET 完全清除了我的 &lt;title&gt; 标记,并在没有我的 LANG 属性的情况下放入了它自己的标记。有没有办法做到这一点?非常感谢。

【问题讨论】:

  • 您在使用母版页吗?母版页/内容页是否会覆盖此内容?
  • @Oded,是的,我正在使用母版页(我的问题的第一句话是这样说的)。内容页面通过 Page.Title = "..." 设置标题。我在问题中显示的代码(我在其中添加了自己的标题标签)直接在母版页代码隐藏中完成。

标签: asp.net webforms


【解决方案1】:

这是因为 HtmlTitle 控件不提供 RenderAttributes 实现。在这种情况下,您不能(轻松)对控件进行子类化,但还有另一种选择。 Control Adapters 的强大功能不仅限于 WebControls - 这个概念也适用于 HtmlControls extends

将以下内容放入您网站的 App_Browsers 目录下的 *.browser 文件中:

<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>

【讨论】:

  • 它有效——很好的解决方案,谢谢。我知道使用 jQuery 很容易做到这一点,但我这样做的主要原因是搜索引擎,因此它们可以识别页面上一些元素(标题标签和几个 DIV)中使用的语言。搜索引擎不会运行 JS,所以需要直接从服务器输出 LANG 属性。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 2020-10-24
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多