MVC控制器中的本地参数

时间:2014-03-17 19:05:26

标签: asp.net-mvc vb.net asp.net-mvc-4

如果我有这样的控制器......

Public Function GetData(fromDate As Date, toDate As Date) As ActionResult

然后我的网址必须是英文(MM-DD-YYYY)... ...

... /的GetData FROM日期= 2014年2月27日&安培; TODATE = 2014年9月29日

但由于我的所有用户都是丹麦语(DD-MM-YYYY),这不会有用......

... /的GetData FROM日期= 27-2-2014&安培; TODATE = 29-2-2014

我可以告诉MVC期望丹麦语(DD-MM-YYYY)参数,还是我必须在发送到服务器之前将日期转换为客户端上的MM-DD-YYYY?

2 个答案:

答案 0 :(得分:2)

如果您使用ISO 8601日期格式,那么您的绑定将适用于任何区域设置。

在VB.Net中,您可以使用字符串格式.ToString("s")为您的网址创建参数。

在JavaScript中,您可以使用.toISOString()功能为您的网址创建参数。

ISO 8601日期格式将绑定到控制器中的DateTimeOffset参数:

Public Function GetData(fromDate As DateTimeOffset, toDate As DateTimeOffset) As ActionResult

答案 1 :(得分:1)

MVC模型绑定考虑了当前文化(区域设置)。例如,您的用户使用da-DK文化,您的应用程序(服务器)设置为en-US文化。显然,两种文化之间的日期格式会有所不同。

一个简单的选项就是Web.config<system.web>

    <globalization culture="da-DK" uiCulture="da-DK" />

这会全局配置您的应用程序以使用da-DK文化。这样,您的控制器操作就会知道dd-MM-yyyy格式的日期。

Scott Hanselman有一篇关于这个主题的好文章:Globalization, Internationalization and Localization ...

<强>更新

此答案仅对POSTed数据有效,但在MVC中,使用InvariantCulture解析查询字符串。 InvariantCulture&#39; ShortDatePatternMM/dd/yyyy

例如,以下查询字符串参数将全部解析为2014年1月7日:01/07/201401-07-201401.07.2014

此外,以下内容还将解析为2014年1月7日:2014/01/072014-01-072014.01.07

最后一个示例与ISO国际日期格式一致,此格式应用于查询字符串参数。