我有一个ajax调用,将日期选择器中的数据作为短日期发送到我的控制器方法。在我的控制器中,我想使用日期来过滤表中的条目,并将整个事物与日期一起返回。
我的应用文化是法语(fr-FR
)
让我们使用June 12th 2015
作为示例。
我遇到了几个问题:
jQuery datepicker默认为dateFormat: "DD d MM yy"
,所以当我在日期选择器中选择6月12日时,该字段显示“vendredi 12 juin 2015”,JS发送"vendredi+12+juin+2015"
作为我的DateTime字段,在控制器的方法中产生null
。
我决定通过将dateFormat
重新指定为"dd/mm/yy"
来解决这个问题,这会占用更少的屏幕空间。
现在,当我选择6月12日时,字段保持(和JS发送)"12/06/2015"
,在控制器的方法中产生{06/12/2015 00:00:00}
,其中12表示月份,06表示日期 。我检查了我的System.Threading.Thread.CurrentThread.CurrentCulture
以查看它是{fr-FR}
,所以我不明白为什么"12/06/2015"
被解析为12月6日。
我在控制器中实施IAuthorizationFilter
,以便在OnAuthorization
中看到CurrentThread的文化内容:
CurrentCulture
和CurrentUICulture
都是{fr-FR}
我尝试将其转过来,并将日期选择器格式设置为mm/dd/yyyy
,其中(in)正确地将6月12日转换为"06/12/2015"
,这会在控制器的方法中产生{12/06/2015 00:00:00}
。这可以工作,但是当我的日期重新插入页面时,它是“12/06/2015”,这是正确的,但由于日期格式,由datepicker解释为12月12日。
我还尝试使用$('#date').datepicker({ dateFormat: "mm/dd/yy "}).val()
发送值,并将第一次调用时的datepicker格式保留为"dd/mm/yy"
,但这仍然为我提供了格式为"dd/mm/yy"
的值
我必须解析然后格式化日期:
$.datepicker.formatDate("mm/dd/yy", $.datepicker.parseDate("dd/mm/yy", $('#date').val()))
为了“反转”月份和日期,欺骗服务器将其解析为6月12日。
附加信息:我的Web.config中没有<globalization ...>
,也没有任何自定义模型绑定器。
如果你需要的话,我可以尝试使用SSCCE,但看起来很难缩小......
TL; DR :当我在控制器方法的第一行中断时,我显示CurrentThread.CurrentCulture = {fr-FR}
,但我的DateTime以"12/06/2015"
(6月12日)发送到请求被解析为"06/12/2015"
(12月6日),然后传递给我的控制器方法。
为什么在服务器解析日期时似乎没有考虑我的CurrentCulture
?
答案 0 :(得分:0)
尝试确保在模型绑定发生之前设置您的文化。如果您检查控制器操作中的System.Threading.Thread.CurrentThread.CurrentCulture
设置,那么在模型绑定器解析日期之后设置它是可行的。
您可以通过实施IAuthorizationFilter来检查这一点。