1

問題

asp.net サーバー コントロールを使用すると、次のような id 属性が自動的に生成されます。

<img id="ctl00_body_ULRepeater_ctl01_LIRepeater_ctl00_PartImg" src="img.png" />

私は一般的に id 属性を嫌うわけではありませんが、これらの不必要に冗長なタイプの名前を使用しないようにし、簡潔でわかりやすい名前を使用するようにしています。

質問

asp.net がこれらの id 属性を生成するのを止めることはできますか? 見栄えが悪く、リピーターなどで大量のアイテムを生成すると、実際にはかなりのページ重量が追加されます。どうすればそれらを取り除くことができますか?

ノート

Visual Studio 2008 で asp.net 3.0 を使用しています。

[アップデート]

わかりましたので、サブクラス化できます (ClientID はオーバーライド可能と宣言されています) が、これはまったく面白くありません。どこでもリテラル コントロールを使用できます。または、歯を食いしばって、ほとんど何もないページのレンダリングが痛々しいほど遅いことに耐えることができます。

4

3 に答える 3

3

asp.net 4.0 の機能の 1 つは、生成される ID をより適切に制御できるようになると思います。ここでは、サーバーによって生成されたコントロールの名前マングリングを取得します。これにより、asp.net はコントロールの ID の一意性を保証できます。

この問題を回避するために、いつでもストレートな HTML マークアップを使用できます (runat=server は使用しないでください)。ただし、ページを軽量化するために使いやすさを犠牲にすることになります。

于 2009-02-13T20:56:55.283 に答える
1

実行時に各コントロールの Id プロパティを null に設定することで、これらの id 属性を完全に非表示にすることができます。

Private Sub repeNewsletters_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles repeNewsletters.ItemDataBound

    If e.Item.DataItem Is Nothing Then
        Return
    End If

    Dim hlDetails = DirectCast(e.Item.FindControl("hlDetails"), System.Web.UI.WebControls.HyperLink)

    hlDetails.ID = Nothing

サブ終了

于 2010-11-02T14:36:34.857 に答える
0

現在、ControlID は ReadOnly プロパティです。ASP.NET Web フォーム (.NET 4.0 を使用) の今後のリリースでは、これはさまざまなメソッド (静的、継承など) を使用して設定可能なプロパティになります。

于 2009-02-13T21:00:24.947 に答える