5

我使用下面的代码来动态包含一个 CSS 文件:

HtmlHead head = (HtmlHead)Page.Header;
HtmlLink link = new HtmlLink();
link.Attributes.Add("href", Page.ResolveClientUrl("~/App_Themes/Default/StyleSheet.css"));
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
head.Controls.Add(link);

问题是:我只想做一次,而且只有当它没有真正包含在页面中时。

如何验证它是否已包含在内?

编辑:

告诉我在页面加载中包含使用的答案!IsPostBack不会解决我的问题,因为此代码将位于 Web 用户控件内,并且我的页面可能有很多相同的用户控件。

例如,我使用下面的代码用 javascript 来做:

if (!Page.ClientScript.IsClientScriptIncludeRegistered("jsScript"))
{
    Page.ClientScript.RegisterClientScriptInclude("jsScript", ResolveUrl("~/Utilities/myScript.js"));
}
4

3 回答 3

6

做到了...

我使用的代码如下:

        Boolean cssAlrealyIncluded = false;
        HtmlLink linkAtual;
        foreach (Control ctrl in Page.Header.Controls)
        {
            if (ctrl.GetType() == typeof(HtmlLink))
            {
                linkAtual = (HtmlLink)ctrl;

                if (linkAtual.Attributes["href"].Contains("datePicker.css"))
                {
                    cssAlrealyIncluded = true;
                }
            }
        }

        if (!cssAlrealyIncluded)
        {
            HtmlLink link = new HtmlLink();
            link.Attributes.Add("href", ResolveUrl("~/Utilities/datePickerRsx/datePicker.css"));
            link.Attributes.Add("type", "text/css");
            link.Attributes.Add("rel", "stylesheet");
            Page.Header.Controls.Add(link);
        }
于 2010-03-02T21:27:19.403 回答
3

为什么不在您的用户控件中,向 HttpContext.Current.Items 添加一个值,指示样式表已经包含在内?这将防止您需要查看用户控件的每个实例的每个标题控件。

于 2010-03-02T21:39:57.020 回答
0

在大多数情况下,您不应该关心 CSS 是否被多次包含。这通常不是问题。

编辑:仅当您需要能够在后续样式表中覆盖css 样式时,顺序才重要。

在 ASP.NET 中,您可以在母版页中包含 CSS(假设您有一个),然后保证只包含一次。由于母版页以编程方式可用(甚至可以通过用户控件),您甚至可以编写一些属性(或方法),允许您控制何时包含哪些 CSS 外部。

于 2010-03-02T20:51:10.683 回答