C# 需要能够将丹麦十进制数传递给MVC控制器

C# 需要能够将丹麦十进制数传递给MVC控制器,c#,asp.net-mvc,vb.net,knockout.js,C#,Asp.net Mvc,Vb.net,Knockout.js,在我的MVC应用程序中,我制作了这个简单的测试函数 Function test(d As Decimal) As JsonResult Return Json(d) End Function 发送…/?d=1900工作正常 发送…/?d=1900失败,且“d”为空 发送…/?d=1.900将d转换为1.9D这里需要做的是将特定于区域性的转换为十进制。如果不指定区域性,ASP.NET MVC将使用不变区域性。类似地,如果使用没有区域性的decimal.Parse函数,将使用系统的当前区域性

在我的MVC应用程序中,我制作了这个简单的测试函数

Function test(d As Decimal) As JsonResult
  Return Json(d)
End Function
发送…/?d=1900工作正常

发送…/?d=1900失败,且“d”为空


发送…/?d=1.900将d转换为1.9D这里需要做的是将特定于区域性的转换为十进制。如果不指定区域性,ASP.NET MVC将使用不变区域性。类似地,如果使用没有区域性的decimal.Parse函数,将使用系统的当前区域性

您需要做的是使用您提供的区域性函数Decimal.Parse

您可以在任何用户/会话类型的设置中设置每个用户的区域性,也可以将其作为参数传入。例如:

/d=1900,文化=da DK

那你就可以通过了

decimal.Parse(d, System.Globalization.CultureInfo.GetCultureInfo(culture))

查询字符串不一定是人类可读的;遵循丹麦的语言环境真的很重要吗?(也就是说,它必须包含一个
?简单的
1900
有什么错?)我确信这是可能的(但我不知道解决方案,因为我不做web/ASP工作),我想只是好奇。你提到
../d=1900在“d”为null时失败,但是像Decimal这样的值类型怎么可能为null??????这与.NET中值类型的基本定义相矛盾。要么在客户端将
1.900
转换为
1900
,要么在控制器方法中将参数更改为字符串并转换为十进制。它是一个查询字符串,所以初始值是一个字符串,可以为null。@MojoDK,您似乎对值类型和空值以及MVC看到的内容有点困惑。ASP.NET MVC使用CultureInfo.InvariantCulture来解析查询字符串参数。因此,如果你想使用一些定制文化,如丹麦文化或其他文化,你必须编写一个定制的模型活页夹,并替换默认的活页夹来实现这一点。这是一个错误的答案。ASP.NET MVC在解析查询字符串参数时始终使用不变量区域性。它不假设任何东西,也不使用任何系统文化。它在解析POST正文有效负载中的值时使用系统区域性。下面的博文将向您提供有关此设计决策的更多详细信息,这正是我建议他自己解析参数的原因,如果他绝对必须以丹麦数字格式传递参数。然后请修复您答案的第一段,因为它绝对错误:
如果您没有指定区域性,系统将使用系统的当前区域性,这可能是一种英语形式。
。正确答案是ASP.NET MVC在解析查询字符串参数时将始终使用不变量文化。您是否有声明的来源,以便我可以验证/包括它?当未指定区域性时,使用.Net解析函数解析十进制数的默认行为是使用CurrentCulture,这是我在本例中假设的情况。当然,请阅读我第一条评论中链接的博客文章。或者,如果你不信任像我这样的博客文章,只需阅读ASP.NETMVC的源代码,我就是这么做的。这是最可靠的信息来源。