In einem CMS wie DotNetNuke kann es vorkommen, dass man dynamisch ein neues Css hinzuladen will. Das geht wie folgt:
HtmlLink cssLink = new HtmlLink();
cssLink.Href = cssUrl;
cssLink.ClientIDMode = ClientIDMode.Static;
cssLink.ID = key;
cssLink.Attributes.Add("rel", "stylesheet");
cssLink.Attributes.Add("type", "text/css");
page.Header.Controls.AddAt(page.Header.Controls.Count, cssLink);
Wenn man jetzt verhindern will, dass das Script und vor allem das Control mehrmals geladen wird, könnte man mit Page.Header.FindControl operieren. Dies funktioniert allerdings nicht. Eine einfache oder zumindest funktionierende Methode ist folgende:
if (HttpContext.Current.Items[key] == null)
{
HtmlLink cssLink = new HtmlLink();
cssLink.Href = cssUrl;
cssLink.ClientIDMode = ClientIDMode.Static;
cssLink.ID = key;
cssLink.Attributes.Add("type", "text/css");
page.Header.Controls.AddAt(page.Header.Controls.Count, cssLink);
HttpContext.Current.Items[key] = true;
}
Im Request-Cache wird markiert, dass das CSS bereits geladen wurde. Die Idee habe ich von stackoverflow.com