1. ホーム
  2. asp.net

[解決済み] データ入力後に文字列をトリミングする最適な方法。モデルバインダーをカスタムで作成した方が良いですか?

2022-04-15 11:19:18

質問

ASP.NET MVCを使用していますが、ユーザーが入力した文字列フィールドは、データベースに挿入される前にすべてトリミングされるようにしたいです。 多くのデータ入力フォームがあるため、ユーザーが入力した文字列の値をすべて明示的にトリミングするのではなく、すべての文字列をトリミングするエレガントな方法を探しています。 人々がどのように、そしていつ文字列をトリミングしているのかに興味があります。

私は、カスタムモデルバインダーを作成し、そこで文字列値をトリミングすることを考えました...そうすれば、私のトリミングロジックはすべて1つの場所に含まれます。 これは良い方法でしょうか? これを行うコードサンプルはありますか?

どのように解決するのですか?

  public class TrimModelBinder : DefaultModelBinder
  {
    protected override void SetProperty(ControllerContext controllerContext, 
      ModelBindingContext bindingContext, 
      System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
    {
      if (propertyDescriptor.PropertyType == typeof(string))
      {
        var stringValue = (string)value;
        if (!string.IsNullOrWhiteSpace(stringValue))
        {
          value = stringValue.Trim();
        }
        else
        {
          value = null;
        }
      }

      base.SetProperty(controllerContext, bindingContext, 
                          propertyDescriptor, value);
    }
  }

こんなコードはいかがでしょうか?

ModelBinders.Binders.DefaultBinder = new TrimModelBinder();

global.asax Application_Start イベントを設定します。