在UserControl内的asp.net标签上使用AssociatedControlID

时间:2014-05-04 23:20:25

标签: c# asp.net user-controls

免责声明:我想要做的事情可能是如此可怕的错误,随时为我提供完全不同的做法。

基本上,我正在尝试创建一个包装asp Label的UserControl,并为我的项目添加一些额外的功能(例如,一些改变标签服务器端行为的属性)。控件的html很简单:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Label.ascx.cs" Inherits="MyNamspace.Label" %>
<asp:Label runat="server" ID="lblThis" />

它背后的许多属性看起来像这样:

public string Text
{
    get { return lblThis.Text; }
    set { lblThis.Text = value; }
}

我仍然坚持使用AssociatedControlID,我很确定这是因为lblThis不知道页面上的任何其他控件,它被卡在了孤立状态。最终我收到错误“无法找到与标识'lblThis'相关联的id'foo'控件。”

所以我的问题是,有没有办法让AssociateControlID以这种方式工作,或者,是否有更好的方法为asp控件添加功能?

2 个答案:

答案 0 :(得分:6)

我知道这是一个老问题,但我今天正在清理一些旧的网页表单,并遇到了同样的问题。 TBH,我懒得将我的所有用户控件重新创建为自定义控件,所以我想看看是否可以在没有太多变化的情况下完成。

事实证明这很简单。如果您的用户控件的ID为Foo,并且其中包含(例如)ID为Bar的文本框,则该标签将变为:

<asp:Label runat="server" AssociatedControlID="Foo:Bar"...>

希望这可以帮助有同样问题的人。

答案 1 :(得分:1)

如果您的所有用户控件都有一个子控件,我认为您最好将其创建为自定义控件。这些都是完全用代码编写的,因此它将摆脱多余的.ascx文件,你的AssociatedControlID也可以正常工作。

有关教程,请查看:

http://msdn.microsoft.com/en-us/library/vstudio/yhzc935f(v=vs.100).aspx

他们的例子甚至恰好展示了如何扩展标签控件,这正是你想要的。该页面有点长,但最后它只是归结为创建一个继承自Label的类,然后使用<%@ Register %>或web.config文件注册它。