Это происходит потому, что элемент управления HtmlTitle не обеспечивает реализацию RenderAttributes . В этом случае вы не можете (легко) создать подкласс элемента управления, но есть и другой вариант. Мощность управляющих адаптеров не ограничивается WebControls - концепция также распространяется и на на HtmlControls.
Перетащите следующее в * .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>