【问题标题】:Custom DateTime format in ASP.NET MVCASP.NET MVC 中的自定义日期时间格式
【发布时间】:2014-12-12 11:10:46
【问题描述】:

我有 ASP.NET MVC 创建视图。

这个视图绑定了包含两个 DateTime 对象的 ViewModel:

[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime When { get; set; }
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime Until { get; set; }

我像这样将它绑定到 DatePickers:

@Html.EditorFor(model => model.When, new { @class = "form-control ui-datepicker-my" })
@Html.EditorFor(model => model.Until, new { @class = "form-control ui-datepicker-my" })

并且日期选择器是这样配置的:

<script type="text/javascript">
    $().ready(function()
    {
        $(".ui-datepicker-my").datepicker({
            dateFormat: "dd-mm-yy"
        });
    });
</script>

问题是当我发布表单时,我的模型无效。我的意思是日期“22-02-2014”被转换为错误格式(它试图将“22”读取为月份)

我不想搞乱全球文化。

怎么做?

我尝试过像这样编辑它:

@Html.EditorFor(model => model.When,"{0:dd-MM-yyyy}", new { @class = "form-control ui-datepicker-my" })

但没有进展

【问题讨论】:

  • 您需要设置服务器文化使其与该格式匹配,或者创建自定义模型绑定器。
  • 遗憾的是,除非您锁定文化设置,否则您会遇到一大堆日期问题。

标签: c# asp.net asp.net-mvc asp.net-mvc-4 datetime


【解决方案1】:

如果你真的坚持不为应用/页面设置文化(它会咬你)。你可以使用这个:

DateTime.TryParseExact(inputedDateString, formatOfInput, CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out result))

有点像

DateTime myDate  = DateTime.MinValue;
string valueFromForm = "22-02-2014";
DateTime.TryParseExact(valueFromForm , "dd-MM-yyyy", CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out myDate))

【讨论】:

  • 我会改变文化信息。如果每个人都说这很好,我相信。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
相关资源
最近更新 更多