【问题标题】:Is there a method for keeping the id I set for an asp .net control when it outputs to HTML?有没有一种方法可以在输出到 HTML 时保留我为 asp .net 控件设置的 id?
【发布时间】:2011-04-20 01:11:07
【问题描述】:

当我创建表单时,我尝试将可访问性作为首要任务,但 asp .NET 的输出否定了其中的一些。例如,当我为输入标签设置标签标签时,我会创建一个这样的:

<label for="frmFirstName">First Name<span class="required">*</span></label>
<asp:TextBox id="frmFirstName" CssClass="textbox" runat="server" />

但是,当从页面输出 HTML 时,输出为:

<label for="frmFirstName">First Name<span class="required">*</span></label>
<input name="ctl00$phMainContent$frmFirstName" type="text" id="ctl00_phMainContent_frmFirstName" class="textbox" />

这是一个问题,因为现在标签不再绑定到输入元素。有没有办法强制 .NET 输出我为输入字段设置的 exact id?我不应该使用 Javascript 来纠正这样的事情。

【问题讨论】:

    标签: asp.net xhtml


    【解决方案1】:

    如果您使用 ASP.Net 4,您可以将控件的 ClientIDMode 属性设置为 static。这将让它在渲染时保持 ID 标签的值。

    【讨论】:

    • 很遗憾,我们公司使用的CMS还是2.0,他们不想更新服务器。
    【解决方案2】:

    使用asp:Label 元素并将其AssociatedControlId 属性指向您的文本框。

    <asp:Label ID="lblFirstName" runat="server" AssociatedControlId="frmFirstName">First Name<span class="required">*</span></asp:Label>
    <asp:TextBox id="frmFirstName" CssClass="textbox" runat="server" />
    

    这应该会为您输出正确的 HTML。

    【讨论】:

    • 通常,Label 会发出 span,但如果添加 AssociatedControlID 属性,它会在 HTML 中呈现 label 元素。
    • 哇。好吧,whaddaya 知道...谢谢。这很有帮助。
    【解决方案3】:

    除了 AssociatedControlId 和 解决方案之外,如果您的控件(在本例中为“frmFirstName”)保证是页面上唯一具有该 ID 的控件,那么您可以设置控件的 ClientIDMode 属性为“静态”,这意味着 ASP.NET 不会在呈现的 HTML 中修改 ID。

    例如:

    <label for="frmFirstName" runat="server" ID="lblFirstName">First Name</label>
    <asp:TextBox runat="server" ID="frmFirstName" ClientIDMode="Static" />
    

    将呈现为

    <label for="frmFirstName" id="some$aspnet$id$lblFirstName">First Name</label>
    <input type="text" id="frmFirstName" />
    

    如果您碰巧需要从 Javascript 中引用它,这也将变得更容易,因为在 Javascript 中呈现 ASP.NET 的自动 ID 可能会很痛苦(据我所知,不可能单独进行.js 文件,您需要在页面上嵌入 JS 并使用 )。

    在此处查看有关 ClientIDMode 的更多信息:http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx

    【讨论】:

      【解决方案4】:

      您可以使用ClientId 属性。这是将作为 HTML 中的控件 ID 输出的内容,以及您可以使用客户端引用渲染元素的内容:

      <label for="<%:frmFirstName.ClientId%>">First Name<span class="required">*</span></label>
      <asp:TextBox id="frmFirstName" CssClass="textbox" runat="server" /
      

      注意:

      &lt;%:%&gt; 是 ASP.NET 4.0 的新功能 - 如果在 .NET 3.5 及之前版本上,您将需要使用 &lt;%=%&gt;

      编辑:

      只是补充一点,ClientId 是从 Javascript 引用控件时要走的路。

      【讨论】:

      • 感谢您的快速回复。我会试试看。
      • 再次感谢。这种方法虽然有点脏,但可以满足我的需要。
      • @Adam - 这就是 ASP.NET 的工作原理以及为什么存在ClientID。是的,它看起来不太好,但网络表单就是这样。如果您想要更清晰的标记,您可能需要查看 ASP.NET MVC。
      猜你喜欢
      • 1970-01-01
      • 2012-02-25
      • 2020-02-10
      • 2015-02-04
      • 2012-10-27
      • 1970-01-01
      • 2011-11-14
      • 2023-01-19
      • 2021-10-15
      相关资源
      最近更新 更多