有没有一种简单的方法可以从 .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 文件中获取缩略图

我需要一种在 ASP.NET 网络表单中的控件中显示 JSON 和 XML 的方法

有没有一种方便的方法可以使用 ADO .NET 将数据从单个列获取到集合中?