有没有一种简单的方法可以从 .NET 用户控件中删除“ct100”前缀?
Posted
技术标签:
【中文标题】有没有一种简单的方法可以从 .NET 用户控件中删除“ct100”前缀?【英文标题】:is there a simple way to remove the "ct100" prefix from a .NET user control? 【发布时间】:2011-10-30 02:05:41 【问题描述】:长话短说,几十页没有使用母版页。对于一个新模块,我创建了一个带有菜单控件的母版页(菜单控件已经存在),因此我可以在我现在创建的六个左右页面中获得相同的外观。由于内容页使用母版页,Menu 控件的名称更改为ct100_Menu1
而不仅仅是Menu1
。除非有人决定使用控件的 exact 名称来设置菜单样式,并通过其确切 ID(例如 CSS 是 Menu1 a /* stuff */
)来设置菜单样式,否则不会成为问题。所以菜单无法正确呈现因为我使用的是母版页,而不仅仅是复制代码。
我无法更改菜单文件中的 CSS 代码,因为它可能会破坏某些内容,所以有什么方法可以更改控件以不显示讨厌的 ct100
,而无需添加任何工具或创建自己的工具自定义控件(因为我无法替换 Menu.ascx 控件,尽管我可以修改它以添加 CSS 类)或者是我唯一的选择,要么不使用母版页,要么将菜单 CSS 复制到另一个文件中并设置正确吗?
感觉有点进退两难,因为代码是特意编写的,因此您不能使用母版页,而且没有人回头更改它。
【问题讨论】:
使用 .NET 时使用类名而不是 ID 的另一个原因 可能会添加一个自定义响应过滤器,并使用正则表达式或其他东西解析出额外的位。 msdn.microsoft.com/en-us/library/…(我知道这是一件非常骇人听闻的事情,从长远来看这可能只会损害可维护性) 【参考方案1】:您应该将 ClientIdMode 设置为静态。 Here's more information from MSDN。注意:这仅适用于 .NET 4.0。
在早期版本中,我建议对类进行样式设置,因为您无法真正控制在任何地方使用它的名称(正如您所发现的那样)。
【讨论】:
【参考方案2】:如果您使用的是 ASP.net 4.0,则可以设置控件的 ClientID 属性。
否则,您将陷入痛苦的世界:自定义控件、ASP.net 文字或 javascript 来更改 ID。
【讨论】:
3.5 :( 看起来我唯一的选择是复制 CSS,至少不要在其他东西上花费“太多时间”(因为那样我会因为想要使用母版页而受到谴责首先,而不是仅仅复制/粘贴,这被认为更快......)【参考方案3】:您使用的是 .NET 4 吗?如果是这样,您可以在控件上进行设置:
<asp:SomeControl ClientIDMode="Static" />
【讨论】:
【参考方案4】:只需将新名称添加到 CSS - 不删除旧名称(因为您说这是一个问题):
ctl100_Menu1 a,
Menu1 a /* stuff */
【讨论】:
如果 Menu1 在不同的页面上有不同的名称会怎样?您只需继续添加到该选择器。我不会说这是最优的。 它目前始终具有名称 Menu1 - 以一致的方式添加母版页应该使其始终具有名称 ctl100_Menu1。如果这种情况激增,我不得不承认它不是最优的。【参考方案5】:如果您使用的是 ASP.NET 4.0,您可以覆盖每个控件或所有控件的 ClientId 呈现模式。例如:
<my:Menu runat="server" Id="Menu1" ClientIDMode="Static" />
这将强制将值“Menu1”保留为所呈现元素的客户端 ID。 (see here)。
不过,我建议将 CSS 类应用于菜单元素,然后围绕类调整 CSS 规则。例如:
#Menu1 a
...到:
#Menu1 a,
div.menu a
...等
【讨论】:
【参考方案6】:要“纠正”整个 Web 应用程序的这种行为,请在 web.config 中查找以下标记:
<system.web>
...
<pages ... clientIDMode="*something*">
</pages>
...
</system.web>
删除clientIDMode="*something*"
属性规范。把它拿出来。
是的。
【讨论】:
以上是关于有没有一种简单的方法可以从 .NET 用户控件中删除“ct100”前缀?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 asp.net 登录控件自动验证以前经过身份验证的用户?
有没有一种简单的方法可以从 CakePHP 的视图中获取 AuthComponent 用户数据?
将数据从 ASP.NET 页面传递到动态加载的 ASCX 用户控件
C#/ASP.NET - 从 PDF/DOC 文件中获取缩略图