【发布时间】:2009-04-28 17:16:32
【问题描述】:
我有一个实现对 css 文件的引用的用户控件,现在我想在页面上多次使用此用户控件,这将导致 css 文件的重复包含。
对于 javascript 文件,使用 ScriptManager 很简单。
那么您对ScriptManager 的解决方案或类似方法有何建议?
【问题讨论】:
我有一个实现对 css 文件的引用的用户控件,现在我想在页面上多次使用此用户控件,这将导致 css 文件的重复包含。
对于 javascript 文件,使用 ScriptManager 很简单。
那么您对ScriptManager 的解决方案或类似方法有何建议?
【问题讨论】:
这是我以前使用过的一种技术,虽然它可能不是最好的:
Dim cssLink As String = String.Format("<link rel='stylesheet' type='text/css' href='{0}/css/cssLink.css' />", Request.ApplicationPath)
If (From c As LiteralControl In Page.Header.Controls.OfType(Of LiteralControl)() Where c.Text = cssLink).Count = 0 Then
Page.Header.Controls.Add(New LiteralControl(cssLink))
End If
【讨论】:
由于 q 被标记为 c#,我想我不妨从帮助类中粘贴 c# 版本:
public static void AddStyleLink(string href)
{
Page page = (Page)HttpContext.Current.CurrentHandler;
var existing =
(from c
in page.Header.Controls.OfType<HtmlGenericControl>()
where c.Attributes["href"] == href
select c).FirstOrDefault();
if (existing == null)
{
HtmlGenericControl link = new HtmlGenericControl("link");
link.Attributes.Add("rel", "stylesheet");
link.Attributes.Add("href", href);
page.Header.Controls.Add(link);
}
}
【讨论】:
没有像 ClientScript 实用程序那样检查样式是否注册到页面的简单方法。
如果您将样式注册为外部 css 文件到这样的页面:
HtmlLink link = new HtmlLink();
link.Href = relativePath;
link.Attributes["type"] = "text/css";
link.Attributes["rel"] = "stylesheet";
Page.Header.Controls.Add(link);
然后,您可以通过循环页眉的 Controls 集合并查找 CSS 文件的路径来检查它是否存在。
【讨论】: