【问题标题】:ASP.NET - Swap TextBoxes for Labels when Enabled=FalseASP.NET - 启用 = False 时为标签交换文本框
【发布时间】:2009-06-25 21:19:53
【问题描述】:

设置:带有大量 TextBox 控件的 Web 表单。

当我将 TextBox 控件的任何一个 Enabled 属性设置为 False 时,我想在运行时将该 TextBox “交换”为标签。这里的想法是,如果它无论如何都是只读的,则不要将其显示在专为编辑而设计的控件中。

我认为这应该非常简单且可重复使用,但是最好的方法是什么?

【问题讨论】:

    标签: asp.net textbox runtime label readonly


    【解决方案1】:

    不确定这是最好的方法,我会让自定义服务器控件是一个文本框,

    然后重写render方法,检查是否是只读的,

    如果它是只读的,则像标签控件一样呈现您的跨度标签。

    如果没有,那么让基础(文本框)渲染接管......

    public class SpecialTextbox : TextBox
    {
        public override void RenderControl(HtmlTextWriter writer)
        {
            if (!this.ReadOnly)
            {
                base.RenderControl(writer);
            }
            else
            {
                writer.Write(string.Format("<span id=\"{0}\" class=\"{1}\">{2}</span>", 
                                this.ClientID, 
                                this.CssClass, 
                                this.Text));
            }
        }
    }
    

    【讨论】:

    • 如果您愿意,也可以将 'span' 换成 'label'
    【解决方案2】:

    一种可能的解决方案是创建一个扩展 TextBox 的新控件。然后,您的专用控件将覆盖(部分)呈现代码,导致控件在 ReadOnly = true 时呈现类似于标签。

    【讨论】:

      【解决方案3】:

      另一种方法是研究使用控制适配器。您基本上可以执行 BigBlondeViking 推荐的完全相同的操作,但您可以继续在代码中使用常规的 asp:textbox 控件。这对您和其他开发人员来说会容易得多。

      About control adapters

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        相关资源
        最近更新 更多