安装程序:具有大量TextBox控件的Web窗体。ASP.NET - 启用时交换文本框标签= False
当我将TextBox控件的Enabled属性中的任何一个设置为False时,我想在运行时将TextBox“交换”出标签。这里的想法是,只要它是只读的,不要将其显示在专为编辑而设计的控件中。
我在想这应该是非常简单和可重复使用的,但是最好的方法是什么?
安装程序:具有大量TextBox控件的Web窗体。ASP.NET - 启用时交换文本框标签= False
当我将TextBox控件的Enabled属性中的任何一个设置为False时,我想在运行时将TextBox“交换”出标签。这里的想法是,只要它是只读的,不要将其显示在专为编辑而设计的控件中。
我在想这应该是非常简单和可重复使用的,但是最好的方法是什么?
不知道它的最好的方式,我会做一个自定义服务器控件是一个文本框,
然后重写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));
}
}
}
一种可能的解决方案是创建一个扩展TextBox的新控件。然后,您的专用控件将覆盖渲染代码的一部分,导致控件在ReadOnly = true时呈现类似于标签。
我喜欢他们的方式,你觉得... – BigBlondeViking 2009-06-25 21:25:51
另一种方法是寻找到使用控制适配器。你基本上可以做到与BigBlondeViking建议的完全相同的事情,但是你可以在代码中使用常规的asp:textbox控件。这对你和其他开发者来说会容易得多。
你可以交换“跨度”为“标签”,如果你想和 – BigBlondeViking 2009-06-26 17:36:26