【问题标题】:Detecting if controls exist in a control collection检测控件集合中是否存在控件
【发布时间】:2009-03-12 11:54:35
【问题描述】:

更新:抱歉,我意识到我可以迭代控件集合,只是在寻找更好/更有效的方法。

我正在尝试在运行时将一些 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。

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    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 集合并寻找具有 ma​​in.css href 的 HtmlLink

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

    Page.Header.FindControl("your_literals_id");
    

    【讨论】:

      【解决方案2】:

      也许循环遍历控件集合并测​​试 ID 属性。如果找到,请记住并打破。从来没有在 ASP.NET 中这样做过,但在 WinForms 和 WPF 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多