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

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

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

有帮助吗?

解决方案

不知道它的最好的方式,我会做一个自定义服务器控件是一个文本框,

然后覆盖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));
        }
    }
}

其他提示

一种可能的解决方案是创建一个新的延伸的控制文本框。然后,您的专门控制会覆盖呈现代码(部分),使控制呈现类似于标签时只读=真。

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

关于控制适配器

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top