嵌入在页面上的用户控件更改控件的ClientID

时间:2013-06-26 08:34:24

标签: c# asp.net user-controls clientid

我有一个用户控件(.ascx),我将其嵌入到我的页面(.aspx)中,如下所示:

<%@ Register TagName="UI" TagPrefix="my" Src="~/userControls/UI.ascx" %> 
<my:UI runat="server" ID="mytestui" />

加载页面时,用户控件内的控件(文本框,下拉列表等)会自动更改。假设我有一个名为txtTest的文本框,它会更改为mytestui_txtTest。

正如您所看到的那样,它将上面的用户控件的ID作为控制权附加。

有没有办法防止这种情况发生?

2 个答案:

答案 0 :(得分:2)

这是因为您的控件是UserControl类的子类,它实现了INamingContainer接口。默认情况下,实现此接口的所有控件都会使用自己的ID预先添加子ID,从而确保页面上的每个ID都是唯一的。

要避免此行为,您有两种选择:

  1. 创建服务器控件,不是直接从UserControl继承而是从Control类继承。这个没有实现INamingContainer。但是,您将没有标记文件,并且必须以编程方式生成所有控件。

  2. [编辑:仅限ASP.NET 4] 使用ClientIDMode="Static"进行子控件。此模式可确保控件的服务器和客户端ID完全相同。在这种情况下,这是开发人员的工作,以确保此控件仅在页面上使用一次,以避免ID重复。

答案 1 :(得分:1)

您使用的.Net版本是什么?如果&gt; = 4.0,您可以使用ClientIDMode="Static",正如安德烈所说。您也可以将其设置为控件或页面级别。