MVC2のPOSTデータからバインドする前に、いくつかの値をフィルタリングする必要があります。残念ながら、私はときどき小数点にマップされるフォーム値の "N/A"を渡すクライアント側のコードを変更することはできません?タイプ。何が起こる必要があるかは、「N/A」がPOST値でバインド/検証される前に空白になっている場合です。MVC ModelBindersを使用してバインド前のポスト値をフィルタリングする
私はそれがDefaultModelBinderを拡張ModelBinderを使用して作業を取得するために、すべての午前しようとしました:
私がいる問題は、私が最初に掲載さ値へのアクセスを取得する方法がわからないですpublic class DecimalFilterBinder : DefaultModelBinder
{
protected override void BindProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
{
if (propertyDescriptor.PropertyType == typeof(decimal?))
{
var model = bindingContext.Model;
PropertyInfo property = model.GetType().GetProperty(propertyDescriptor.Name);
var httpRequest = controllerContext.RequestContext.HttpContext.Request;
if (httpRequest.Form[propertyDescriptor.Name] == "-" ||
httpRequest.Form[propertyDescriptor.Name] == "N/A")
{
property.SetValue(model, null, null);
}
else
{
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
else
{
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
}
それがリストの中にあるとき。 Form[propertyDescriptor.Name]
にすることはできません。これはフォームのリスト項目に含まれているためです(たとえば、入力は実際にはValues[0].Property1
です)。私はモデルバインダーをglobal.asaxに接続して正常に動作していますが、デフォルトのバインディングが発生する前に元のフォーム値を空の文字列にフィルタリングする方法を知りません。