art*_*olk 22 asp.net-mvc modelbinders value-provider
ASP.NET MVC中的模型绑定很棒,但它遵循区域设置.在我的语言环境中,小数点分隔符是逗号(','),但用户也使用点('.'),因为它们懒得切换布局.我想在一个地方为decimal我的模型中的所有字段实现这个.
我应该为decimal类型实现自己的Value Provider(或事件Model Binder),还是我错过了一些简单的方法来做到这一点?
mat*_*ieu 38
最干净的方法是实现自己的模型绑定器
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());
致谢:默认ASP.NET MVC 3模型绑定器不绑定小数属性
要正确处理组分隔符,只需替换
Convert.ToDecimal(valueProviderResult.AttemptedValue);
在选定的答案中
Decimal.Parse(valueProviderResult.AttemptedValue, NumberStyles.Currency);
| 归档时间: | 
 | 
| 查看次数: | 32886 次 | 
| 最近记录: |