C# 修剪ASP.NET Web窗体中的所有用户输入字符串

C# 修剪ASP.NET Web窗体中的所有用户输入字符串,c#,asp.net,webforms,C#,Asp.net,Webforms,我正在寻找一种方法来修剪ASP.NET中的所有用户输入,而不调用每个字符串实例。我遇到了MVC。有没有办法在web表单中实现这一点?有哪些选择?作为一个不太理想的选项,是否有办法将其合并到类的set方法中?您可以创建一个自定义的文本框,它总是返回文本的修剪版本: public class CustomTextBox : TextBox { public override string Text { get { return base.Text.Trim(); }

我正在寻找一种方法来修剪ASP.NET中的所有用户输入,而不调用每个字符串实例。我遇到了MVC。有没有办法在web表单中实现这一点?有哪些选择?作为一个不太理想的选项,是否有办法将其合并到类的set方法中?

您可以创建一个自定义的
文本框
,它总是返回文本的修剪版本:

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

然后,只要在需要此行为的任何地方使用此扩展方法,而不是普通的
文本框。

您必须从相应的父级调用此扩展方法,例如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();
    }
  }
}
公共静态void TrimTextControls(此控件父控件,bool TrimLeading)
{
foreach(类型()的父.GetAllControls()中的文本框txt)
{
如果(引导)
{
txt.Text=txt.Text.Trim();
}
其他的
{
txt.Text=txt.Text.TrimEnd();
}
}
}

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

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);
}