2009-03-12 10 views
0

更新:明快さの欠如についての謝罪コントロールコレクションを反復することができ、より効率的な方法を探していました。コントロールがコントロールコレクション内に存在するかどうかを検出する

実行時にASP.Netページにいくつかのcss要素とjs要素を動的に追加しようとしていますが、このコードが複数のコントロールで使用されているため、関連リンクが1回だけ注入されるようにする必要があります。

現在、私は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 

オブジェクトのこのインスタンスを検索します(これは失敗していると思います)。

コントロールコレクションで特定のIDを確認する方法はありますか?あるいは、idのチェックをしているコレクションの既存のコントロールをループするためにsubを書く必要があります。

おかげ

答えて

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コレクションHtmlLinkmain.css hrefを持つものを探してください。

EDIT:はまた、これは、ヘッダのControlsコレクションにあなたのリテラルコントロールを見つけるために役立つかもしれない:IDプロパティのControlsコレクションとテストを通じて

Page.Header.FindControl("your_literals_id"); 
1

たぶんループ。発見された場合は、覚えて休憩してください決してASP.NETではなく、WinFormsとWPFでこれを行いました。

関連する問題