ASP.NET MVC中的模型绑定是非常好的,但它遵循区域设置。在我的区域设置中,小数点分隔符是逗号(‘,’),但用户也使用dot(‘。’),因为它们懒惰地切换布局。我想要在一个地方实现我的模型中的所有十进制字段。
我应该为小数类型实现自己的价值提供者(或事件模型绑定)吗?我错过了一些简单的方法呢?
解决方法
最简单的方法是实现自己的模型绑定
public class DecimalModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); return valueProviderResult == null ? base.BindModel(controllerContext,bindingContext) : Convert.ToDecimal(valueProviderResult.AttemptedValue); // of course replace with your custom conversion logic } }
并在Application_Start()中注册:
ModelBinders.Binders.Add(typeof(decimal),new DecimalModelBinder()); ModelBinders.Binders.Add(typeof(decimal?),new DecimalModelBinder());
学分:Default ASP.NET MVC 3 model binder doesnt bind decimal propeties