Asp.net 有没有一个简单的方法来删除;ct100“;来自.NET用户控件的前缀?

Asp.net 有没有一个简单的方法来删除;ct100“;来自.NET用户控件的前缀?,asp.net,css,user-controls,master-pages,asp.net-3.5,Asp.net,Css,User Controls,Master Pages,Asp.net 3.5,长话短说,几十页没有使用母版页。对于一个新模块,我创建了一个带有菜单控件(菜单控件已经存在)的母版页,这样我就可以在我现在创建的六个左右的页面上获得相同的外观。由于内容页使用母版页,因此菜单控件的名称更改为ct100\u Menu1,而不仅仅是Menu1。除非有人决定使用CSS控件的确切的名称,根据其确切ID设置菜单样式(例如CSS是Menu1 a{/*stuff*/})。因此,菜单无法正确呈现,因为我使用的是母版页,而不仅仅是复制代码 我无法更改菜单文件中的CSS代码,因为它可能会破坏某些内容

长话短说,几十页没有使用母版页。对于一个新模块,我创建了一个带有菜单控件(菜单控件已经存在)的母版页,这样我就可以在我现在创建的六个左右的页面上获得相同的外观。由于内容页使用母版页,因此菜单控件的名称更改为
ct100\u Menu1
,而不仅仅是
Menu1
。除非有人决定使用CSS控件的确切的名称,根据其确切ID设置菜单样式(例如CSS是
Menu1 a{/*stuff*/}
)。因此,菜单无法正确呈现,因为我使用的是母版页,而不仅仅是复制代码

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


感觉有点进退两难,因为代码是故意编写的,所以你不能使用母版页,也没有人回去更改它。

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


否则,您将受到伤害,如:自定义控件、ASP.net文本或JavaScript来更改ID。

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

 <asp:SomeControl ClientIDMode="Static" />

您应该将ClientIdMode设置为静态。注意:这只是.NET4.0版本


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

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


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

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

#Menu1 a,
div.menu a {
。。。etc

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

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

...
...
删除
clientdmode=“*something*”
属性规范。把它拿出来


是的。

使用.NETIt时使用类名而不是ID的另一个原因可能是添加一个自定义响应筛选器,并用正则表达式或其他东西解析多余的位。(我知道这真的是一件非常骇人的事情,从长远来看,这可能会损害可维护性)3.5:(看起来我唯一的选择是复制CSS,至少不会在其他东西上花费“太多时间”(因为这样一来,我会因为一开始就想使用母版页而受到谴责,而不仅仅是复制/粘贴,这被认为是更快的…)如果Menu1在不同的页面上有不同的名称会发生什么?你只需不断添加到该选择器。我不会说这是最优的。它当前总是有名称Menu1-以一致的方式添加母版页会导致它总是有名称ctl100_Menu1。如果这种情况蔓延,我必须同意它不是最优的。
#Menu1 a,
div.menu a {
<system.web>
    ...
    <pages ... clientIDMode="*something*">
    </pages>
    ...
</system.web>