我注意到如果我将 TextBox 添加到页面,但没有为其分配 ID 属性,则此属性会根据该呈现页面的控制层次结构自动生成。
我正在创建一个要在一个页面上多次使用的自定义控件(所以硬编码一个 ID 是行不通的)。
ASP.NET 是否有一种方法可以用来为这些控件中的每一个生成一个“唯一”ID?
我注意到如果我将 TextBox 添加到页面,但没有为其分配 ID 属性,则此属性会根据该呈现页面的控制层次结构自动生成。
我正在创建一个要在一个页面上多次使用的自定义控件(所以硬编码一个 ID 是行不通的)。
ASP.NET 是否有一种方法可以用来为这些控件中的每一个生成一个“唯一”ID?
您已经回答了自己的问题 - 不要指定一个,它将为您生成。
有趣的可能是Scott Guthrie 博客上的这篇文章ClientIdMode
,它描述了ASP.NET 4 中可用的“新” :
- AutoID — 像在 .NET 3.5 中一样呈现输出(自动生成的 ID,仍会呈现 ctrl00 等前缀以实现兼容性)
- 可预测(默认) - 修剪任何“ctl00” ID 字符串,如果列表/容器控件连接子 ID(例如:id=”ParentControl_ChildControl”)
- 静态——将完整的 ID 命名控制权交给开发人员——无论他们设置为控件的 ID 是什么,都会呈现(例如:id=”JustMyId”)
- 继承——告诉控件遵循父容器控件的命名行为模式
如果您愿意,您可以覆盖ClientID
或。UniqueID
但使用ClientIDMode
更好。
public override string UniqueID
{
get
{
return "newid";
}
}
public override string ClientID
{
get
{
return "newid";
}
}