我有一个用户控件(.ascx),我将其嵌入到我的页面(.aspx)中,如下所示:
<%@ Register TagName="UI" TagPrefix="my" Src="~/userControls/UI.ascx" %>
<my:UI runat="server" ID="mytestui" />
加载页面时,用户控件内的控件(文本框,下拉列表等)会自动更改。假设我有一个名为txtTest的文本框,它会更改为mytestui_txtTest。
正如您所看到的那样,它将上面的用户控件的ID作为控制权附加。
有没有办法防止这种情况发生?
答案 0 :(得分:2)
这是因为您的控件是UserControl
类的子类,它实现了INamingContainer
接口。默认情况下,实现此接口的所有控件都会使用自己的ID预先添加子ID,从而确保页面上的每个ID都是唯一的。
要避免此行为,您有两种选择:
创建服务器控件,不是直接从UserControl
继承而是从Control
类继承。这个没有实现INamingContainer
。但是,您将没有标记文件,并且必须以编程方式生成所有控件。
[编辑:仅限ASP.NET 4] 使用ClientIDMode="Static"
进行子控件。此模式可确保控件的服务器和客户端ID完全相同。在这种情况下,这是开发人员的工作,以确保此控件仅在页面上使用一次,以避免ID重复。
答案 1 :(得分:1)
您使用的.Net版本是什么?如果&gt; = 4.0,您可以使用ClientIDMode="Static"
,正如安德烈所说。您也可以将其设置为控件或页面级别。