如何使用asp:Label的AssociatedControlID属性使服务器控件工作

时间:2012-03-06 21:48:04

标签: asp.net label

当您在Label控件上设置AssociatedControlID属性时,它会将<label> HTML标记的for属性设置为目标控件的ClientID:

<label id="Label" for="TextBox">Dat TextBox</label>
<input id="TextBox" name="TextBox" type="text">

我已经创建了一个服务器控件,其中包含一个TextBox,我希望标签将其for属性呈现给控件的内部TextBox。我的第一个想法是直接指向我的服务器控件:

<asp:Label ID="AwesomeLabel" runat="server" AssociatedControlID="AwesomeControl">
    Check out my awesome control!</asp:Label>
<custom:MyControl ID="AwesomeControl" runat="Server" />

但这会使for属性指向围绕服务器控件内容呈现的<span>

<label id="AwesomeLabel" for="AwesomeControl">Check out my awesome control!</label>
<span id="AwesomeControl">
    <input name="AwesomeControl$ct123" type="text"></span>

好像AssociatedControlID通过简单地获取目标控件的ClientID来设置for属性:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.label.associatedcontrolid.aspx

我不想进入页面的.aspx.cs以编程方式设置它,因为经常使用此服务器控件,我希望它的实现尽可能快。

还有其他方法可以使Label标签将for属性呈现给我的服务器控件的内部TextBox,无论是在.aspx标记中还是从我的服务器控件的代码中?

2 个答案:

答案 0 :(得分:5)

如果您的usercontrol具有ID AwesomeControl 且usercontrol中的文本框具有ID AwesomeTextbox ,则必须将AssociatedControlID设置为: AwesomeControl:AwesomeTextbox

<asp:Label ID="AwesomeLabel" runat="server" AssociatedControlID="AwesomeControl:AwesomeTextbox">
Check out my awesome control!</asp:Label>
<custom:MyControl ID="AwesomeControl" runat="Server" />

答案 1 :(得分:1)

目前你的span是拥有你所指向的id并且你的输入没有任何ID的元素。

为您的输入元素提供ID并更改标签,使其指向该ID。

<asp:Label ID="AwesomeLabel" runat="server" AssociatedControlID="txtAwesomeControl">
    Check out my awesome control!</asp:Label>

<span id="AwesomeControl">
    <input id="txtAwesomeControl" name="AwesomeControl$ct123" type="text" />
</span>