ASP.NET - 如果不包括CSS,如何包含CSS?

时间:2010-03-02 20:45:12

标签: asp.net css include stylesheet verify

我使用下面的代码动态地包含一个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"));
}

3 个答案:

答案 0 :(得分:4)

是吗......

我使用的代码如下:

        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);
        }

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

编辑:如果您需要能够在后续样式表中覆盖 CSS样式,则订单才有意义。

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