如何通过带有连字符的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包含"-"的元素,并且仍然是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);