开发者社区 问答 正文

使用逗号作为小数分隔符在项目整体c#, ASP.net mvc

我有一个项目在ASP。 净MVC 5。 我想在总体软件使用德国十进制格式。 我把全球化“de-DE”网络配置和我有覆盖“BeginExecuteCore”基本控制器的控制器继承。

protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) { CultureInfo culture = new CultureInfo("de-DE", true); culture.NumberFormat.NumberDecimalSeparator = ","; Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; return base.BeginExecuteCore(callback, state); } 我也改变了区域格式“德国”窗口。 控制器工作当我通过小数。 实际上软件允许小数只有逗号,不允许用点。 但是当我使用EF从数据库取小数,获取与点在UI和加载点。 我需要在总体软件显示逗号在所有十进制数。 怎么了?

展开
收起
SONGYiiiD 2019-12-04 21:50:40 919 分享 版权
阿里云 AI 助理回答

在ASP.NET MVC 5项目中,你已经正确地设置了全局的区域设置为"de-DE"并自定义了BeginExecuteCore方法来确保线程文化是德国格式。然而,Entity Framework (EF) 默认使用的是.NET的类型系统和格式化规则,它可能不会直接遵循你应用层设置的区域性格式。

针对从数据库获取的数值以点而非逗号显示的问题,你可以尝试以下几种解决方案:

  1. 在模型绑定时转换: 在你的模型类中,可以重写属性的 setter 方法,在数据绑定时手动将点转换为逗号。但这种方法可能不适用于所有场景,特别是自动化的EF上下文操作。

  2. 自定义ValueConverter: 如果你使用的是EF Core,可以利用Value Converter特性来自动在数据库存储格式与应用展示格式之间转换。创建一个转换器来处理decimal或double类型的转换。

    public class DecimalCommaSeparatorConverter : ValueConverter<decimal, string>
    {
        public DecimalCommaSeparatorConverter() : base(
            v => v.ToString("N", CultureInfo.GetCultureInfo("de-DE")),
            v => decimal.Parse(v, CultureInfo.GetCultureInfo("de-DE"))
        )
        { }
    }
    
    // 在DbContext的OnModelCreating中添加转换器
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<YourEntityType>()
            .Property(e => e.YourDecimalProperty)
            .HasConversion(new DecimalCommaSeparatorConverter());
    }
    
  3. 数据库查询后处理: 在从数据库获取数据后,可以在ViewModel或直接在Controller中遍历对象,将所有decimal字段用ToString("N", new CultureInfo("de-DE"))方法转换格式。

  4. 全局JSON序列化设置: 如果问题出现在JSON响应中,可以配置ASP.NET MVC的JsonSerializerSettings来全局使用"de-DE"文化进行序列化。

    var jsonSettings = new JsonSerializerSettings
    {
        Culture = new CultureInfo("de-DE")
    };
    JsonConvert.DefaultSettings = () => jsonSettings;
    

请根据你的具体应用场景选择合适的解决方案。如果是在视图中直接显示,确保视图也按照"de-DE"文化格式化数字。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答