处理丢失的AssociatedControlID的好方法

时间:2009-06-29 10:12:34

标签: asp.net html controls

我有一个中等大小的项目,有很多页面。我注意到的一件事是我们有很多标签,其中AssociatedControlID指向不可见的控件。当用户具有编辑权限时,目标控件设置为可见,但不是正常的。

这意味着生成的html无效,我们希望尽可能接近。

我尝试实现一个新标签,它会覆盖现有的标签控件,并仅在需要时呈现for属性。事实证明,在Label类中将所需的功能设置为内部,这很痛苦。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

Subclassing Label控件并不难:

namespace MyNamespace
{
   public class BetterLabel : Label
   {
      protected override void OnPreRender(EventArgs e)
      {
         Control control = FindControl(this.AssociatedControlID);
         if (control != null && !control.Visible)
            this.AssociatedControlID = "";

         base.OnPreRender(e);
      }
   }
}

以下是使用BetterLabel的方法:

<%@ Register TagPrefix="uc1" Namespace="MyNamespace"  %>
...
<uc1:BetterLabel ID="Label1" runat="server" Text="Label" AssociatedControlID="TextBox1" />
<asp:TextBox ID="TextBox1" runat="server" Visible="false"></asp:TextBox>