这是因为 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>