当asp.net控件输出到HTML时,是否有一种方法可以保持我为它设置的id?

当asp.net控件输出到HTML时,是否有一种方法可以保持我为它设置的id?,asp.net,xhtml,Asp.net,Xhtml,当我创建表单时,我试图将可访问性作为最高优先级,但是asp.NET的输出否定了其中的一些。例如,当我为输入标记设置标签标记时,我会将其创建为: <label for="frmFirstName">First Name<span class="required">*</span></label> <asp:TextBox id="frmFirstName" CssClass="textbox" runat="server" /> 名字*

当我创建表单时,我试图将可访问性作为最高优先级,但是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输出我为输入字段设置的确切id?我不必使用Javascript来纠正类似的问题。

您可以使用该属性。这是在HTML中作为控件Id输出的内容,您可以使用客户端引用呈现的元素:

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

使用
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。

如果您使用ASP.Net 4,您可以将控件的属性设置为
static
。这将使其在呈现时保留ID标记的值。

除了关联的ControlID和解决方案外,如果您的控件(在本例中为“frmFirstName”)保证是页面上唯一具有该ID的控件,则可以将控件的ClientIDMode属性设置为“Static”,这意味着ASP.NET不会在呈现的HTML中使用ID

例如:

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

该“创建”标记不正确。它需要是“”标记才能正确访问。通常,
Label
会发出
span
,但如果添加
AssociatedControlID
属性,它会在HTML.Whoa中呈现
Label
元素。嗯,你知道什么。。。谢谢这非常有帮助。感谢您的快速响应。我会试试的。再次谢谢。这个方法虽然有点脏,但可以满足我的需要。@Adam-这就是ASP.NET的工作方式以及
ClientID
存在的原因。是的,看起来不太好,但webforms就是这样。如果您想要更清晰的标记,您可能需要查看ASP.NET MVC。不幸的是,我们公司使用的CMS仍然设置为2.0,并且他们不想更新服务器。
<label for="frmFirstName" id="some$aspnet$id$lblFirstName">First Name</label>
<input type="text" id="frmFirstName" />