asp.net - 处理丢失的 AssociatedControlID 的好方法

标签 asp.net html controls

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

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

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

有没有更好的办法?

最佳答案

子类化 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>

关于asp.net - 处理丢失的 AssociatedControlID 的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1057565/

相关文章:

vb.net - 如何在 VB.NET 中向 System.Windows.Form.Control 添加属性?

c# - ASP.net c# 部分获取请求

javascript - 禁用范围输入的 HTML5 拖放

sqlite - 确定 HTML5 数据库内存使用情况

javascript - 添加到featherlight.js弹出窗口的链接

asp.net 递归查找控件

javascript - 动态检查没有回发的asp net复选框

asp.net - 隐藏 HTML 编辑器工具栏中的按钮 (AjaxControlToolkit)

c# - ASP.NET:重用相同的 Repeater ItemTemplate

c# - 如何遍历控件以获得特定类型的控件?