我有一个项目在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和加载点。 我需要在总体软件显示逗号在所有十进制数。 怎么了?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在ASP.NET MVC 5项目中,你已经正确地设置了全局的区域设置为"de-DE"并自定义了BeginExecuteCore
方法来确保线程文化是德国格式。然而,Entity Framework (EF) 默认使用的是.NET的类型系统和格式化规则,它可能不会直接遵循你应用层设置的区域性格式。
针对从数据库获取的数值以点而非逗号显示的问题,你可以尝试以下几种解决方案:
在模型绑定时转换: 在你的模型类中,可以重写属性的 setter 方法,在数据绑定时手动将点转换为逗号。但这种方法可能不适用于所有场景,特别是自动化的EF上下文操作。
自定义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());
}
数据库查询后处理: 在从数据库获取数据后,可以在ViewModel或直接在Controller中遍历对象,将所有decimal字段用ToString("N", new CultureInfo("de-DE"))
方法转换格式。
全局JSON序列化设置: 如果问题出现在JSON响应中,可以配置ASP.NET MVC的JsonSerializerSettings来全局使用"de-DE"文化进行序列化。
var jsonSettings = new JsonSerializerSettings
{
Culture = new CultureInfo("de-DE")
};
JsonConvert.DefaultSettings = () => jsonSettings;
请根据你的具体应用场景选择合适的解决方案。如果是在视图中直接显示,确保视图也按照"de-DE"文化格式化数字。