我已经检查了1万个帖子,但没有一个人能解决这个非常简单的问题。
在我的UI上,我有一个TextBoxFor
的DateTime属性(在我的模型上)非常标准的东西。
模型
[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");
我可以在检查窗口看到文化是&#34; es-ar&#34;,但问题仍然存在。
的问题!
问题1: 如果我写了类似于&#39; 01/02/208&#39;,MVC自动映射认为它是1月2日......但实际上是2月1日。
问题2: 如果我写了类似于&#39; 31/03/201&#39;,MVC自动映射认为这是一个错误的日期(如30月),但实际上是3月30日。
即使是页面验证工具也会说&#34; The value '31/03/2018' is not valid for DateTo.
&#34;
我在这里缺少什么?
答案 0 :(得分:0)
解决方案,如果你把它放在你的配置中它可以正常工作:
<globalization culture="es-AR" uiCulture="es-AR" />
我看到的新问题,如果我不想改变文化实时回到EN-US怎么办? (改变线程文化似乎是解决方案,但不像我上面提到的那样工作)
现在,它解决了我的问题。