ASP.NET-仅在尚未包含CSS的情况下才包括它?

问题描述 投票:5回答:3

我使用下面的代码动态地包含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"));
}
asp.net css include stylesheet verify
3个回答
4
投票

Did it ...

我使用的代码如下:

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

3
投票

为什么不在您的用户控件中,将一个值添加到HttpContext.Current.Items,以指示样式表已被包含?这样可以避免您需要查看用户控件的每个实例的每个标题控件。


0
投票

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

编辑:仅当您需要能够在后续样式表中使用CSS样式时,顺序才重要。在ASP.NET中,您可以将CSS包含在您的母版页中(假设您有一个CSS),然后可以保证只包含一次。由于母版页可以通过编程方式获得(甚至可以从用户控件中获得),因此您甚至可以编写一些属性(或方法)来控制何时要包括哪些CSS外部对象。

© www.soinside.com 2019 - 2024. All rights reserved.