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

本文关键字:ID 获取 html 控件 连字符 何通过 | 更新日期: 2023-09-27 18:22:33

我有一个用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">

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

对不起,这不会发生。

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

微软关于控件ID的文档显示:

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

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

如果您尝试将runat="server"添加到显示的body标记:<body id="page-list">中,它将在aspx.designer.cs:中显示以下行

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

这显然是在C#语法上抛出了一个异常。

<body id="page-list">不是HTML控件(即System.Web.UI.Control的(子类)实例,因为它没有runat="server"属性。如果要添加runat="server",则会收到JIT编译时错误消息,通知您"页面列表"不是有效的标识符。

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

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

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

在代码背后,你可以这样访问它:

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