在代码隐藏中的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(...);
答案 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和2不适用于ASP.NET 1.x,3和4适用于所有。