2009-06-25 46 views
1

安装程序:具有大量TextBox控件的Web窗体。ASP.NET - 启用时交换文本框标签= False

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

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

回答

3

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

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

如果读它才使你的像标签控件一样的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)); 
     } 
    } 
} 
+0

你可以交换“跨度”为“标签”,如果你想和 – BigBlondeViking 2009-06-26 17:36:26

2

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

+0

我喜欢他们的方式,你觉得... – BigBlondeViking 2009-06-25 21:25:51

2

另一种方法是寻找到使用控制适配器。你基本上可以做到与BigBlondeViking建议的完全相同的事情,但是你可以在代码中使用常规的asp:textbox控件。这对你和其他开发者来说会容易得多。

About control adapters