asp.net-mvc – 接受逗号和点作为小数分隔符[重复]

参见英文答案 > How to set decimal separators in ASP.NET MVC controllers?4个答案ASP.NET MVC中的模型绑定很棒,但它遵循区域设置。在我的语言环境中,小数点分隔符是逗号(‘,’),但用户也使用点(‘。’),因为它们懒得切换布局。我希望在我的模型中的所有十进制字段的一个地方实现。

我应该为十进制类型实现自己的Value Provider(或事件Model Binder),还是我错过了一些简单的方法来执行此操作?

解决方法

最干净的方法是实现自己的模型绑定器
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 doesn’t bind decimal properties

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....