我们最近从.NET 3.5SP1升级到了.NET 4.5。我们发现使用INamingContainer接口的控件现在呈现其ClientID的方式有所不同。
微软的文档说明INamingContainer在控件层次结构中创建一个新的ID命名空间。
旧行为下,我们的ID看起来像这样:
<input id="MyContainer_txtName" />
但是现在我们得到了:
<input id="ctl00_ctl00_c_contentHolder_MyContainer_txtName" />
这个控件的前缀为ct100,它还包含内容保持器的控件名称。
一个使用它的示例类如下:
public class MyTextBox : System.Web.UI.WebControls.TextBox, INamingContainer
{
}
我们设置了
ClientIDMode="AutoID"
以实现向后兼容。我们可以使用
ClientID="static"
手动为每个控件分配正确的ID,但这对我们来说需要完成大量工作。我想了解为什么INamingContianer在早期版本的.NET中呈现的方式与现在不同。
提前致谢。
INamingContainer
接口的控件表现出这种行为吗?像GridView
这样在NamingContainer
中的控件是否像3.5中一样有前缀? - Tim Schmelter