ユーザーに表示される値を修正する ASP.NET MVC のモデルバインダーを作成したいと考えています。たぶん、値の最初の文字を大文字にしたり、文字列をトリムしたりします。
この動作をモデルバインダー内にカプセル化したいと思います。
たとえば、これはTrimModelBinder文字列をトリミングするための a です。(ここから取得)
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.IsNullOrEmpty(stringValue))
stringValue = stringValue.Trim();
value = stringValue;
}
base.SetProperty(controllerContext, bindingContext,
propertyDescriptor, value);
}
}
これにより値がモデルに設定されますが、ページが再表示されると元の値が保持されます (ModelState にあるため)。
トリミングされた値をユーザーに再表示したいだけです。
などOnPropertyValidated、オーバーライドするメソッドはたくさんあります。OnPropertyValidating
おそらく機能させることができますが、間違ったメソッドをオーバーライドした場合に意図しない副作用が発生することは望ましくありません。
ビューを生成しているときに、Trim() などのロジックを実行したくありません。このロジックをモデルバインダー内に完全にカプセル化したいと考えています。