Quand on utilise les MasterPages, il devient impossible d’ajouter un lien vers une feuille de style directement dans une page. En effet, on ne peut mettre la référence à la CSS que dans la section <head/>
et les <asp:Content>
des pages enfants doivent se trouver obligatoirement dans le <body/>
(la <form/> plus exactement).
On a tout de même accès à la section <head/>
depuis le code pour ajouter manuellement un lien vers une CSS avec un contrôle de type HtmlLink.
HtmlLink cssLink = new HtmlLink();
cssLink.Href = "../mapage.css";
cssLink.Attributes.Add("rel", "stylesheet");
cssLink.Attributes.Add("type", "text/css");
Page.Header.Controls.Add(cssLink);
Afin de rendre cette utilisation plus souple, on peut encapsuler ce code dans un contrôle afin de l’ajouter graphiquement dans le designer de page :
public class StyleSheetLink : Control
{
private string _href;
[UrlProperty]
public string Href
{
get { return _href; }
set { _href = value; }
}
protected override void OnPreRender(EventArgs e)
{
HtmlLink cssLink = new HtmlLink();
cssLink.Href = _href;
cssLink.Attributes.Add("rel", "stylesheet");
cssLink.Attributes.Add("type", "text/css");
Page.Header.Controls.Add(cssLink);
}
Ainsi, il suffit d'ajouter dans une page le tag suivant :
<Bewise:StyleSheetLink ID="css" runat="server" Href="~/_css/default.css" />
Pour améliorer ce contrôle, on pourrait ajouter une vérification dans la liste des contrôles du header pour savoir si la CSS n'est pas déjà référencée.