检测控件集合中是否存在控件

时间:2009-03-12 11:54:36

标签: asp.net vb.net custom-server-controls

更新: 对于缺乏清晰度的道歉我意识到我可以迭代控件集合,只是在寻找更好/更有效的方法。

我试图在运行时动态地将一些css和js元素添加到ASP.Net页面中,但由于这个代码用于多个控件,我需要确保相关链接只注入一次。

目前我在OnPreRender活动中有以下代码。

Dim head As HtmlControls.HtmlHead = Me.Parent.Page.Header

If Not _useCustomStyles Then

    Dim litCustomCss As New LiteralControl("<link rel=" & Chr(34) & "stylesheet" & Chr(34) & " href=" & Chr(34) & "/css/udPart_core.css" & Chr(34) & " type=" & Chr(34) & "text/css" & Chr(34) & " media=" & Chr(34) & "screen" & Chr(34) & " />" & vbCrLf)

    litCustomCss.ID = "cssCustom"

    If Not head.Controls.Contains(litCustomCss) Then
        head.Controls.Add(litCustomCss)
    End If

End If

.Contains是否会查找对象的这个实例(我假设这是失败的原因)?

有没有办法检查特定ID的控件集合?或者我将不得不编写一个子循环遍历集合中的现有控件来检查id。

由于

2 个答案:

答案 0 :(得分:2)

对于外部脚本来源,您可以使用:

if (!ClientScript.IsClientScriptIncludeRegistered("externalResuorce"))
{
    ClientScript.RegisterClientScriptInclude("externalResuorce", 
    "scripts/myscripts.js");
}

对于样式表文件,您可以使用:

HtmlLink link = new HtmlLink();
link.Href = "main.css";
link.Attributes["type"] = "text/css";
link.Attributes["rel"] = "stylesheet";
Page.Header.Controls.Add(link);

并控制可能你应该循环 Page.Header.Controls 集合,并寻找主要文件 href的 HtmlLink 。 / p>

编辑:这也可能有助于在标头的控件集合中找到您的文字控件:

Page.Header.FindControl("your_literals_id");

答案 1 :(得分:2)

可能遍历Controls集合并测试ID属性。如果找到,记住并打破。从来没有在ASP.NET中,但在WinForms和WPF中。