页面的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>
答案 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。