有没有一种简单的方法从.NET用户控件中删除“ct100”前缀?

时间:2011-08-18 19:22:31

标签: asp.net css user-controls master-pages asp.net-3.5

长话短说,几十页都没有使用母版页。对于一个新模块,我创建了一个带有菜单控件的母版页(菜单控件已经存在),所以我可以在我正在创建的六个左右页面中获得相同的外观。由于内容页面使用母版页,因此Menu控件的名称已更改为ct100_Menu1,而不仅仅是Menu1。除了有人决定使用控件的完全名称来确定菜单样式的CSS时,它的确切ID(例如CSS为Menu1 a { /* stuff */ })不会成为问题。因此菜单将无法正确呈现,因为我正在使用母版页,而不仅仅是复制代码。

我无法更改菜单文件中的CSS代码,因为它可能会破坏某些内容,因此有什么方法可以更改控件以不显示那个讨厌的ct100而无需添加任何工具或创建混乱我自己的自定义控件(因为我无法替换Menu.ascx控件,虽然我可以修改它以添加CSS类)或者是我唯一的选择,要么不使用母版页,要么将菜单CSS复制到另一个文件中并正确设置?

感觉有点卡在摇滚和硬地之间,因为代码是故意编写的,所以你不能使用母版页,没有人回去改变它。

6 个答案:

答案 0 :(得分:7)

您应该将ClientIdMode设置为Static。 Here's more information from MSDN。注意:这只是.NET 4.0。

在早期版本中,我建议您不要使用类的样式,因为您无法真正控制使用它的名称(如您所知)。

答案 1 :(得分:3)

如果您使用的是ASP.net 4.0,则可以设置控件的ClientID属性。

否则,您将面临一个受到伤害的世界:自定义控件,ASP.net文字或JavaScript来更改ID。

答案 2 :(得分:1)

只需将新名称添加到CSS中 - 无需删除旧名称(因为您说这是一个问题):

 ctl100_Menu1 a, 
 Menu1 a { /* stuff */ }

答案 3 :(得分:0)

您使用的是.NET 4吗?如果是这样,您可以在控件上设置:

 <asp:SomeControl ClientIDMode="Static" />

答案 4 :(得分:0)

如果您使用的是ASP.NET 4.0,则可以按控件或所有控件覆盖ClientId呈现模式。例如:

<my:Menu runat="server" Id="Menu1" ClientIDMode="Static" />

这将强制将值“Menu1”保留为呈现元素的客户端ID。 (see here)。

我建议的是,将CSS类应用于菜单元素,然后围绕类调整CSS规则。 。E.g,:

#Menu1 a {

......来:

#Menu1 a,
div.menu a {

...等

答案 5 :(得分:0)

要为整个Web应用程序“纠正”此行为,请在web.config中查找以下标记:

<system.web>
    ...
    <pages ... clientIDMode="*something*">
    </pages>
    ...
</system.web>

删除clientIDMode="*something*"属性规范。把它拿出来吧。

耶。