DateTime和ASP.NET MVC 3模型绑定的全球化问题

Vas*_*sea 2 globalization asp.net-mvc model-binding asp.net-mvc-3

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

POST /myapp/index
date=03-12-2010&value=something
Run Code Online (Sandbox Code Playgroud)

模型绑定将此映射到正确的日期值"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');
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bui*_*ted 13

从我之前关于这个主题的回答:Nullable DateTime参数在调用动作时永远不会被绑定

" 这是故意的.任何属于URI的部分(注意URI中的"统一")都被解释为它来自不变文化.这是美国用户复制链接并将其发送过来IM给英国的朋友可以确信他的朋友会看到完全相同的页面(例如,由于DateTime转换错误而导致的HTTP 500).通常,在RouteData或QueryString中传递的日期应该在格式化yyyy-mm-dd以便在不同文化中明确无误.

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