【问题标题】:How to get html control by ID that has hyphens?如何通过带有连字符的 ID 获取 html 控件?
【发布时间】: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?这是我很久没有听到的名字了。我感觉到你的痛苦。祝你好运。

标签: c# html css asp.net .net


【解决方案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 }
    • 问题的重点是如何在保留破折号的同时做到这一点。
    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多