我希望在返回值之前,在我的页面上的每个Trim()
控件上执行TexBox
方法。我不想为每个TexBox控件硬编码相同的代码,我想以更优雅的方式进行。
我发现了以下课程
namespace System.Web.UI.WebControls
{
public partial class TrimmedTextBuox : TextBox
{
private string text;
public override string Text
{
get { return string.IsNullOrEmpty(text) ? text : text.Trim(); }
set { text = value; }
}
}
}
但它失败了,而debuggind编译器没有进入get{}
和set{}
。
之后,我创建了一个UserControl
项,但必须从System.Web.UI.UserControl
派生,而不是System.Web.UI.WebControls.TextBox
才能使其正常工作(有一个异常指向该项)
那么,我该怎么做?
答案 0 :(得分:3)
首先,您必须在.aspx页面中注册您的控件:
<%@ Register TagPrefix="customControls" Namespace="WebApplication.Custom.Controls" Assembly="WebApplication"%>
然后你可以使用标记来调用它
<customControls:TrimmedTextBuox ID="txtTrim" runat="server"/>
另外,你不必创建另一个&#34;文本&#34;自定义TextBox
中的属性。相反,它可以这样做:
namespace WebApplication.Custom.Controls
{
public class TrimmedTextBuox : TextBox
{
public override string Text
{
get
{
return base.Text;
}
set
{
if (!String.IsNullOrEmpty(value))
base.Text = value.Trim();
}
}
}
}
答案 1 :(得分:0)
这会在插入之前递归修剪所有文本框。
public static void trimRecursive(Control root)
{
foreach (Control control in root.Controls)
{
if (control is TextBox)
{
var textbox = control as TextBox;
textbox.Text = textbox.Text.Trim();
}
else
{
trimRecursive(control);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
trimRecursive(Page);
}
答案 2 :(得分:0)
解决问题的简单方法是使用new
关键字隐藏基类的Text属性。示例代码......
public class TrimmedTextBox : TextBox
{
public new string Text
{
get
{
var t = (string) GetValue(TextProperty);
return t != null ? t.Trim() : string.Empty;
}
}
}
有关具有属性的新关键字如何为此SO Question
工作的更多信息