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 的功能之一将是能够更好地控制生成的 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 是只读属性。在即将发布的 ASP.NET Web 窗体(带有 .NET 4.0)中,这将是一个使用多种不同方法(如静态、继承等)的可设置属性

于 2009-02-13T21:00:24.947 回答