0

更新:明確さの欠如についての謝罪私は、コントロール コレクションを反復処理できることを認識しており、より優れた/より効率的な方法を探していました。

実行時にいくつかの css および js 要素を ASP.Net ページに動的に追加しようとしていますが、このコードは複数のコントロールで使用されるため、関連するリンクが 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

.Contains はオブジェクトのこのインスタンスを探しますか (これが失敗の理由だと思います)?

特定の ID のコントロール コレクションを確認する方法はありますか? または、id をチェックするコレクション内の既存のコントロールをループするサブを作成する必要がありますか。

ありがとう

4

2 に答える 2

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コレクションをループして、 main.csshrefを持つHtmlLinkを探す必要があります。

編集:これは、ヘッダーのコントロールコレクションでリテラルコントロールを見つけるのにも役立つ場合があります:

Page.Header.FindControl("your_literals_id");
于 2009-03-12T12:07:42.590 に答える
2

たぶん、Controlsコレクションをループして、IDプロパティをテストします。見つかった場合は、覚えて壊してください。ASP.NETではなく、WinFormsとWPFでこれを実行しました。

于 2009-03-12T12:08:05.427 に答える