我已经检查了1万个帖子,他们都没有关于这个非常简单的问题的伎俩。
在我的UI上,我有一个用于DateTime属性的TextBoxFor
(在我的模型上)非常标准的东西。
模型
[DataType(DataType.Date)]
public DateTime DateTo { get; set; }
视图
<div class="Label">
@Html.LabelFor(model => model.DateTo)
</div>
<div class="Control">
@Html.TextBoxFor(model => model.DateTo, "{0:dd/MM/yyyy}", new { @class = "datepicker" })
@Html.ValidationMessageFor(model => model.DateTo)
</div>
jQuery / DatePicker
以防万一,这是datepicker背后的代码,我认为它是jQuery datepicker的标准,请注意在UI中我看到datepicker按预期工作。
$(".datepicker").datepicker({ dateFormat: "dd/mm/yy", changeYear: true, showAnim: 'blind' });
文化
所以我从其他帖子中学到了,你可以改变文化来实现这一点,但是没有用,我用这段代码覆盖了OnActionExecuting
:
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ES-AR");
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ES-AR");
我可以在检查窗口看到,文化是“es-ar”,但问题仍然存在。
问题!
问题1:如果我写了类似'01 / 02/2018'的内容,MVC自动映射认为它是1月2日......但实际上是2月1日。
问题2:如果我写了类似'31 / 03/2018'的内容,MVC自动映射认为这是一个错误的日期(如30月),但实际上是3月30日。
甚至页面验证器说“The value '31/03/2018' is not valid for DateTo.
”
我在这里错过了什么?
oookey,在解释这个时,我得到了解决方案(橡皮鸭堆栈溢出:/)...
解决方案,如果你把它放在你的配置中它工作正常:
<globalization culture="es-AR" uiCulture="es-AR" />
我看到的新问题,如果我想改变文化实时回到EN-US怎么办? (改变线程文化似乎是解决方案,但没有像我上面提到的那样工作)
现在,它解决了我的问题。