2

页面的 ClientIDMode 的默认值是 AutoID。控件的 ClientIDMode 的默认值为 Inherit。如果您没有为页面或页面上的任何控件设置 ClientIDMode,则所有控件都将使用 AutoID 算法。

这是来自 msdn。但是当我在 ASP.NET 4 甚至 3.5 中创建 Web 应用程序时,控件的所有 id 都是我为它们编写的。它们不是由 autoId 算法生成的。然后我尝试手动将 clientIDMode="AutoID" 添加到控件中,它也没有达到我的预期。那么问题是什么?有什么规则可以使它可用吗?

提前致谢,

已编辑

这是在 .aspx 页面中

<div>
    <asp:Panel ID="Panel1" runat="server">
        <asp:Panel ID="Panel2" runat="server">
            <asp:Panel ID="Panel3" runat="server">
                <asp:Panel ID="Panel4" runat="server">
                    (:
                </asp:Panel>
            </asp:Panel>
        </asp:Panel>
    </asp:Panel>
</div>

这是输出:

<div id="Panel1">
        <div id="Panel2">

                <div id="Panel3">

                    <div id="Panel4">
                        (:
                </div>

        </div>

    </div>
</div>
4

2 回答 2

4

你得到你所有的 ID 的原因是因为没有理由让 .NET 框架改变它们。

如果您已将 Panel 放置在 Repeater 控件中,那么它们将全部更改以避免多个同名 ID。

示例(不正确的标记):

<asp:Repeater id="repeater1" runat="server">
  <template>
      <asp:Panel id="Panel1" runat="server">
          <asp:Panel id="Panel2" runat="server">

          </asp:Panel>
      </asp:Panel>
  </template>
</asp:Repeater>

由此生成的 HTML 将显示面板 ID 已更改为从包含控件继承。就像是repeater1_ct100_Panel1

当您使用母版页、内容持有者和数据绑定控件时,也会发生同样的情况。.NET 更新 ID 以避免多个 ID 同名。

于 2011-08-30T10:49:02.883 回答
1

如果将一个控件嵌套到另一个控件中,则可以清楚地看到不同 ClientIDMode 值之间的差异;AutoId模式在每个父命名容器之后命名控件,而Static模式启动一个新的命名层次结构。可预测模式主要用于数据绑定控件,而继承模式使控件使用其父级的 ClientIDMode。

于 2011-08-30T10:15:18.343 回答