【问题标题】:Is rendered id of aspx control always rendered the same in source html code?在源 html 代码中,aspx 控件的呈现 id 是否总是呈现相同的?
【发布时间】:2013-09-24 16:44:02
【问题描述】:

例如,我有一个带有 id="txtkms" 的 aspx 文本框 在 html 视图源中,我可以看到它被呈现为 ContentPlaceHolder1_Gridview1_txtkms_1 我的问题是.. 每次我在任何浏览器或任何其他计算机上运行我的 aspx 页面时,此控件txtkms 总是呈现为ContentPlaceHolder1_Gridview1_txtkms_1

【问题讨论】:

    标签: c# javascript html asp.net


    【解决方案1】:

    我从未见过它发生变化,但将 ClientID 传递给您将使用它的 javascript 会更安全...

    【讨论】:

    • 是否可以将gridview中文本框的ClientId和同一行中另一个文本框的ClientId传递给javascript函数?
    • a=这个控件的id b=is此控件的值(我认为 clac(this.value) 将起作用)c=gridView 同一行中特定控件的 ID。
    【解决方案2】:

    为控件生成的 ID 实际上仅取决于您定义的设置,或者如果您没有指定任何,则取决于适用的默认设置。

    根据您为页面/控件的 ClientIDMode 属性设置的内容,控件 ID 可以与您在标记中放置的完全相同,或者可以附加命名容器的 ID下划线字符 (_)。

    例如,当您设置ClientIDMode="Static" 时,ClientID 值将设置为您在标记中设置的ID 属性的值。

    [ClientID 是 ASP.NET 生成的 HTML 标记的控件 ID]

    另外,当您设置ClientIDMode="AutoID" 时,ClientID 值是通过将每个父命名容器的ID 值与控件的ID 值连接起来生成的。此外,在呈现控件的多个实例的数据绑定方案(例如转发器、GridView..)中,在控件的ID 值前面插入一个递增值。每个段由下划线字符 (_) 分隔。

    页面的默认值ClientIDModePredictable。控件的默认值ClientIDModeInherit

    检查 this MSDN link。另外,请查看 this link 了解更多详情。

    【讨论】:

    • 我没有为页面或 Gridview 中的控件指定任何 ClientIDMode 属性。我得到ContentPlaceHolder1_Gridview1_txtkms_0 txtkms 递增值 ContentPlaceHolder1_Gridview1_txtkms_1 ..2...3 等等。现在..我正在使用前 5 行的这些渲染 ID。请问我之前的问题。 stackoverflow.com/q/18973570/2064292
    • 这是预期行为。您没有指定任何内容意味着将使用默认设置。如果您没有指定任何内容,这并不意味着根本不应用任何设置。在这种情况下,默认设置将适用。控件的默认设置是继承,对于数据绑定控件中的控件,默认生成模式是可预测的,如上所述。ClientID 值是通过将父命名容器的 ClientID 值与 ID 值连接生成的带有下划线字符的控件。检查我的答案中提供的 MSDN 链接
    • 好吧,我明白你在说什么..现在 cliendidmode 在我的情况下是可以预测的......我假设它总是会渲染 txtkmsContentPlaceHolder1_Gridview1_txtkms_0 ..1..2..3 等等任何计算机上每个浏览器上的特定页面和 GridView 对吗?在我的情况下,它是否可能会呈现为 ContentPlaceHolder1_Gridview1_txtkms_0..1..2 以外的其他内容?
    • 1.) 是的,你是对的。 2.) 如果您愿意,您可以为您的 GridView 将 ClientIDMOde 设置为静态。但在 DataBound 控件中,不建议这样做,因为不同行中的许多控件将具有相同的 ID。此外,您看到的后缀 _0..1..2 等由 ClientIdRowSuffix 属性控制。如果您愿意,可以将 suffix 属性设置为任何列名称,因此列值将附加在末尾,而不是像 0、1、2 这样的数值。在 Javascript 中访问客户端的控件时,请使用 ClientID 属性,在您后面的代码中,仅使用 ID 值访问控件名称。
    【解决方案3】:

    最好在 Web 配置中设置 ClientIdMode=Static。

    你甚至可以使用这个:

    您可以使用带有选择器的 jQuery 结尾:

    $('input[id$="myServerId"]')

    但请记住,这种选择器比直接使用 的 id 选择要慢得多。

    http://jsperf.com/id-vs-ends-with

    这个解决方案来自 Gromer:

    What's the best way to deal with ASP.NET's ClientID

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 2016-06-18
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多