ASP.NET - 启用时为标签交换文本框= False

时间:2009-06-25 21:19:53

标签: asp.net textbox runtime label readonly

设置:包含大量TextBox控件的Web表单。

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

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

3 个答案:

答案 0 :(得分:3)

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

然后覆盖render方法,检查它是否是readonly,

如果它是只读的,那么像标签控件一样渲染你的span标签。

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

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));
        }
    }
}

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

About control adapters