如何通过带有连字符的 ID 获取 html 控件?

Posted

技术标签:

【中文标题】如何通过带有连字符的 ID 获取 html 控件?【英文标题】:How to get html control by ID that has hyphens? 【发布时间】:2014-11-13 04:41:50 【问题描述】:

我有一个用 html 编写的前端,我正在将其转换为 asp,并且许多控件的名称中都带有“-”。这引起了疯狂的头痛,因为没有时间重命名所有内容,并且 ctrl-f 和 replace 以某种方式破坏了我的 css。当它们有破折号时,有什么方法可以在后面的代码中访问这些控件?下面的代码我试过了。

//Can find when there is no dash in it, but that breaks the css after find/replace of full solution
HtmlGenericControl body = (HtmlGenericControl)this.Page.FindControl("page-list");
body.Attributes.Add("class", GlobalVariables.webAppSkin);

//I have also tried this, but logout stays null
WebControl logout = (WebControl)Page.FindControl("logout-link");

这是 html 控件:

<body id="page-list">

【问题讨论】:

你试过this.Page.FindControl(@"page-list");我不确定这是否有效,但我稍后会尝试。 是的,还是抓不到那个讨厌的控件。 @Greg "page-list" 没有任何需要转义的字符,因此使用字符串文字不会有任何区别。 我相信这是不可能的。此外,您无法在后面的代码中找到未标记 runat="server" 的控件。您需要在 HTML 标记和 CSS 中重命名并添加上述属性。查找和替换。 @TylerH JQuery UI?这是我很久没有听到的名字了。我感觉到你的痛苦。祝你好运。 【参考方案1】:

对不起,这不会发生。

您不能拥有一个 id 包含“-”的元素,并且仍然是 runat="server" ASP.NET 控件。

Microsoft 关于控件 ID 的文档指出:

http://msdn.microsoft.com/en-us/library/system.web.ui.control.id.aspx

只有字母数字字符和下划线字符 (_) 的组合是此属性的有效值。包含空格或其他无效字符将导致 ASP.NET 页面解析器错误。

如果您尝试将runat="server" 添加到您显示的正文标签:&lt;body id="page-list"&gt;,它将在aspx.designer.cs 中为您提供以下行:

protected global::System.Web.UI.HtmlControls.HtmlGenericControl page-list;

这显然会引发 C# 语法异常。

【讨论】:

所以 ASP 在有效 html 下设计崩溃。难怪我不喜欢这个平台,一个设计的错误,多么美妙。【参考方案2】:

&lt;body id="page-list"&gt; 不是 HTML 控件(即 System.Web.UI.Control 的(子类)实例,因为它没有 runat="server" 属性。如果要添加 runat="server",那么您将获得 JIT编译时错误消息,通知您“page-list”不是有效的标识符。

ASP.NET Web Forms 4.0 添加了ClientIDMode 属性,但是它不允许您设置完全自定义的ID 属性值。如果不使用 &lt;asp:Literal&gt; 或实现您自己的控件(或我的首选选项:切换到 ASP.NET MVC),则没有简单的解决方案。

【讨论】:

【参考方案3】:

如果您编写 runat="server",您可以使用其 ID 访问代码中的控件。这是您的案例的示例

<body runat="server" id="testID">

在后面的代码中你可以这样访问它:

body.Attributes.Add("class", value);

【讨论】:

runat="server" 给我带来了问题,因为它在 Default.aspx.designer.cs 中声明了变量的实例,它不能用破折号编译... 在这种情况下更改不带破折号的 ID,并在 css 中写入 .body css script 问题的重点是如何在保留破折号的同时做到这一点。

以上是关于如何通过带有连字符的 ID 获取 html 控件?的主要内容,如果未能解决你的问题,请参考以下文章

Swift编程中字符转为类,代码创建控件详解

带有 Node Js 的 Mongodb

swift学习笔记:字符转为类,代码创建控件

MFC 我在几个图片控件显示了图片,如何获取这几个图片的资源编号?

jquery 如何获取asp.net用户控件的id

awk 如何获取每行最后一个字符