我有一个中等规模的项目,有很多页面。我注意到的一件事是,我们有很多标签都有关联的controlid指向不可见的控件。目标控件在用户具有编辑权限时设置为可见,但通常不可见。
这意味着在中生成的html无效,我们希望尽可能接近它。
我试图实现一个新的标签,它覆盖现有的标签控件并仅在需要时呈现for属性。这被证明是痛苦的,因为在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>

09-15 19:56