0

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

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

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

如您所见,它采用上面用户控件的 ID 并将其附加到控件。

有什么办法可以防止这种情况发生吗?

4

2 回答 2

2

发生这种情况是因为您的控件是UserControl实现INamingContainer接口的类的子类。默认情况下,实现此接口的所有控件都会在子 ID 前面加上自己的 ID,从而确保页面上的每个 ID 都是唯一的。

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

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

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

于 2013-06-26T08:44:11.050 回答
1

您使用的是什么版本的 .Net?如果 >= 4.0 你可以使用ClientIDMode="Static"Andrei 说的。您也可以在控件或页面级别设置它。

于 2013-06-26T08:50:27.853 回答