3

我正在寻找一种方法来修剪 ASP.NET 中的所有用户输入,而无需在每个字符串实例上调用Trim() 。我遇到了扩展 MVC 的 DefaultModelBinder。有没有办法在网络表单中做到这一点?有哪些可用选项?作为一个不太理想的选择,有没有办法将它合并到一个类的 set 方法中?

4

3 回答 3

8

您可以创建一个TextBox始终返回文本的修剪版本的自定义:

public class CustomTextBox : TextBox
{
    public override string Text
    {
        get { return base.Text.Trim(); }
        set { base.Text = value; }
    }
}

然后在TextBox需要此行为的任何地方使用它而不是正常的。

于 2013-09-26T17:04:22.517 回答
4

这是递归修剪页面(或父控件)中所有文本框的实用方法。

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);
}
于 2013-09-26T17:24:10.043 回答
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();
    }
  }
}
于 2013-09-26T17:12:54.847 回答