代码之家  ›  专栏  ›  技术社区  ›  Brandon

ASP.NET-启用时交换标签的文本框=false

  •  1
  • Brandon  · 技术社区  · 15 年前

    设置:包含大量文本框控件的Web窗体。

    当我将TextBox控件的任何一个Enabled属性设置为false时,我希望在运行时将该文本框“交换”为标签。这里的想法是,如果它是只读的,就不要将它显示在为编辑而设计的控件中。

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

    3 回复  |  直到 15 年前
        1
  •  3
  •   BigBlondeViking    15 年前

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

    然后重写呈现方法,检查它是否为只读,

    如果它是只读的,那么像标签控件那样呈现跨度标记。

    如果没有,那么让基础(文本框)呈现接管…

    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));
            }
        }
    }
    
        2
  •  2
  •   Jørn Schou-Rode dscher    15 年前

    一种可能的解决方案是创建一个扩展文本框的新控件。然后,专用控件将重写呈现代码(部分),使控件在readonly=true时呈现类似于标签的内容。

        3
  •  2
  •   smercer    15 年前

    另一种方法是研究使用控制适配器。您基本上可以做与BigBlondViking所做的完全相同的事情,但是您可以在代码中使用常规的asp:textbox控件。这对您和其他开发人员来说会容易得多。

    About control adapters