我正在寻找一种方法来修剪ASP.NET中的所有用户输入而不在每个字符串实例上调用Trim()。我遇到了extending the DefaultModelBinder的MVC。有没有办法在Web表单中执行此操作?有哪些选择?作为一个不太理想的选择,有没有办法将它合并到类的set方法中?
答案 0 :(得分:8)
您可以创建自定义TextBox
,它始终返回文本的剪裁版本:
public class CustomTextBox : TextBox
{
public override string Text
{
get { return base.Text.Trim(); }
set { base.Text = value; }
}
}
然后在您需要此行为的任何地方使用此代替正常TextBox
。
答案 1 :(得分:4)
以下是以递归方式修剪页面(或父控件)中所有TextBox的实用程序方法。
public static void TrimTextBoxesRecursive(Control root)
{
foreach (Control control in root.Controls)
{
if (control is TextBox)
{
var textbox = control as TextBox;
textbox.Text = textbox.Text.Trim();
}
else
{
TrimTextBoxesRecursive(control);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
TrimTextBoxesRecursive(Page);
}
答案 2 :(得分:1)
您必须从相应的父级调用此扩展方法,例如Page.TrimTextControls
public static void TrimTextControls(this Control parent, bool TrimLeading)
{
foreach (TextBox txt in parent.GetAllControls().OfType<TextBox>())
{
if (TrimLeading)
{
txt.Text = txt.Text.Trim();
}
else
{
txt.Text = txt.Text.TrimEnd();
}
}
}