如何在ASP.NET 4中使用ClientIDMode

时间:2011-08-30 10:10:43

标签: asp.net clientid

  

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

这是来自msdn。但是当我在ASP.NET 4甚至3.5中创建一个Web应用程序时,控件的所有ID都是我为它们编写的。它们不是由autoId算法生成的。然后我尝试手动添加clientIDMode =“AutoID”到控件,它也没有按预期工作。那么问题是什么?是否有任何规则可供其使用?

提前致谢,

EDITED

这是在.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>

2 个答案:

答案 0 :(得分:4)

您获得所有身份证据的原因是因为.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将显示Panel ID已更改为从包含控件继承。像repeater1_ct100_Panel1

这样的东西

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

答案 1 :(得分:1)

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