我正在使用带有主页的webforms ASP.NET。我想在<title>
标记中添加LANG属性。 ASP.NET自动生成标题标记。我已经尝试使用ID和runat =“server”添加我自己的标记,如下所示:
<title id="titleBlock" runat="server"></title>
执行此操作时,我可以设置如下所示的属性而不会出现任何错误。
titleBlock.Attributes.Add("lang", "it");
然而,ASP.NET完全删除了我的<title>
标记,并在没有我的LANG属性的情况下放入了它。有没有办法实现这个目标?非常感谢。
答案 0 :(得分:3)
这是因为 HtmlTitle 控件未提供 RenderAttributes 实现。在这种情况下,您不能(轻松)子类化控件,但还有另一种选择。 控制适配器的强大功能不仅限于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>