【问题标题】:Good way to handle missing AssociatedControlID处理丢失的 AssociatedControlID 的好方法
【发布时间】:2009-06-29 10:12:33
【问题描述】:

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

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

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

有没有更好的办法?

【问题讨论】:

  • 如果控件没有被渲染,那么为什么关联的标签会被渲染呢?可见性/渲染不应该同时应用于输入控件和关联的标签吗?
  • +1 仅用于使用“AssociatedControlID”属性(或<label for="MyInputField"> 语法),我认为这是一种非常好的做法,并始终尝试鼓励我的团队使用。

标签: asp.net html controls


【解决方案1】:

子类化标签控件并不难:

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>

【讨论】:

    猜你喜欢
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多