【问题标题】:Globalization problem with DateTime and ASP.NET MVC 3 Model BindingDateTime 和 ASP.NET MVC 3 模型绑定的全球化问题
【发布时间】:2010-12-04 04:42:46
【问题描述】:

我的应用程序在 web.config 全球化部分中配置的 ro-RO 文化设置下运行。如果我发出 POST 请求,例如

POST /myapp/index
date=03-12-2010&value=something

模型绑定将此映射到“2010 年 12 月 3 日”的正确日期值,因为 ro-RO 区域性的默认日期时间格式是 dd-MM-yyyy。如果我将请求方法更改为 GET 传递相同的数据,我的操作中的日期值将变为“2010 年 3 月 12 日”(MM-dd-yyyy 日期时间格式)

GET /myapp/index?date=03-12-2010&value=something

$.getJSON('/Home/Index', $('form').serialize(), function(d) {
            // ...
});
$.post('/Home/Index', $('form').serialize(), function(d) {
            // ...
}, 'json');

所以在这种情况下,“getJson”和“post”必须返回相同的结果,但由于日期时间不同,我得到了不同的结果。

如何也为 GET 请求启用相同的解析格式?

我知道我可以使用更通用的格式,例如 yyyy-MM-dd 日期,但我只是好奇为什么会这样?

【问题讨论】:

    标签: asp.net-mvc globalization asp.net-mvc-3 model-binding


    【解决方案1】:

    来自我之前对此主题的回答:Nullable DateTime Parameter is never bound when calling the action

    "这是故意的。URI 中的任何内容(请注意 URI 中的“统一”)都被解释为来自不变的文化。这是为了让美国的用户复制一个链接并通过 IM 将其发送给英国的朋友。可以确信他的朋友会看到完全相同的页面(例如,由于 DateTime 转换错误而不是 HTTP 500)。一般来说,日期传入的 RouteData 或 QueryString 应采用 yyyy-mm-dd 格式,以便跨文化明确

    如果您需要以文化感知的方式解释 QueryString 或 RouteData 参数,请将其作为字符串拉入,然后手动将其转换为所需的类型,并传入所需的文化。 (DateTime.Parse 具有允许您指定文化的重载。)如果您这样做,我建议还将所需的文化作为 QueryString 或 RouteData 参数,这样 URI 的“统一”部分就不会丢失,例如URL 将类似于 ...?culture=fr-fr&date=01-10-1990。"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      相关资源
      最近更新 更多