Cela se produit parce que le contrôle htmlTitle ne fournit pas un RenderAttributes mise en œuvre. Vous ne pouvez pas (facilement) sous-classer le contrôle dans ce cas mais il y a une autre option. La puissance de Les adaptateurs de contrôle ne sont pas limités à WebControls - le concept aussi extends à HtmlControls.
baisse ce qui suit dans un fichier * .browser sous les App_Browsers répertoire de votre site:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter
controlType="System.Web.UI.HtmlControls.HtmlTitle"
adapterType="HtmlTitleAdapter"
/>
</controlAdapters>
</browser>
</browsers>
Voici un prototype pour l'adaptateur correspondant:
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");
}
}
Notez que l'interne render l'implémentation de HtmlTitle diffère quelque peu:
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();
}
Je ne suis pas sûr qu'un titre contienne des éléments enfants, donc je ne pense pas que ce soit un problème.
Espérons que cela aide. En outre, il serait beaucoup plus facile d'ajouter cet attribut sur le client en utilisant jQuery.
<script type="text/javascript">
$(document).ready(function() {
$("title").attr("lang", "it");
});
</script>
Utilisez-vous des pages maîtres? Est-ce que la page principale/la page de contenu l'emporte sur cela? – Oded
@Oded, oui j'utilise des masterpages (la première phrase de ma question le dit). La page de contenu définit le titre via Page.Title = "...". Le code que je montre dans ma question (où j'ai ajouté ma propre balise de titre) est fait directement dans le mastercode codebehind. –