ASP.NET:枚举代码隐藏中的头元素

时间:2009-11-28 00:10:55

标签: asp.net css hyperlink

在代码隐藏中的Page_Load()上,我想枚举所有<link>标记。如果未在<link>的标记中指定,我想要的目的是想要将Page添加到CSS文件中。

我该怎么做?

我想我应该能够在标题中的元素集合上使用LINQ,不是吗?

这是我的伪代码

var pageAlreadyContainsCssLink = false;

foreach(var control in this.Header.Controls) {
    if (control.TagName == "link" &&
        control.Attributes["href"] == "my_css_file.css") {
        pageAlreadyContainsCssLink = true;
        break;
    }
}

if (pageAlreadyContainsCssLink) {
    // Don't add <link> element
    return;
}

// Add the <link> to the CSS

this.AddCssLink(...);

2 个答案:

答案 0 :(得分:1)

解决方案是将Controls集合枚举为HtmlGeneric控件:

    foreach(HtmlControl control in this.Header.Controls)
    {
        if (control is HtmlLink &&  control.Attributes["href"] == this.CssFileLinkHref)
        {
            pageAlreadyContainsCssLink = true;
            break;
        }
    }

答案 1 :(得分:0)

是的,您的代码应该有效。但是,这种情况应该在root用户管理,防止它发生,所以你不需要编写“以防万一”的代码来处理它。

您的循环检查了css链接是否存在,如果存在则退出。如果出现2次或更多次怎么办?要删除副本吗?

我建议使用以下一种或组合:

  1. 母版页(您可以单独管理css文件)
  2. 主题(所有css文件每页请求自动链接)
  3. 代码标准化
  4. 所有页面标题内的单个自定义控件(需要确保第3项到位)
  5. 1和2不适用于ASP.NET 1.x,3和4适用于所有。