POST 上的日期无效,但在我获取页面时有效

Date is invalid on POST, but valid when I GET the page

我有一个基于模型的简单 ASP.NET MVC 视图。此模型具有以下 属性:

    public DateTime PaymentStartDate { get; set; }

当我在 GET 方法中输入我的视图时,PaymentStartDate 的值是 3 月 31 日(31/3/2018 23:59:59)。

在我看来,我做了以下事情:

    @Html.HiddenFor(c => c.PaymentStartDate)

渲染如下:

<input data-val="true" data-val-date="The field PaymentStartDate must be a date." data-val-required="The PaymentStartDate field is required." id="PaymentStartDate" name="PaymentStartDate" type="hidden" value="03/31/2018 23:59:59" />

但是当我 POST 到我的端点时,我的模型状态无效,因为:

The value '03/31/2018 23:59:59' is not valid for PaymentStartDate.

问题:

如果我选择一个日期,例如 3/12/2018,它会起作用。所以我的假设是因为我有一台丹麦机器(使用 dd/MM/yyyy 格式),它会出现一些问题。

有什么想法或提示我可以在这里做什么吗?

始终对 DateDateTime 值使用 ISO8601 表示法。特别是当您将值存储为字符串时(例如在隐藏输入字段中的 HTML 中)以及在 2 个端点之间发送值时(例如在浏览器和服务器之间)。

这样无论客户端或服务器文化如何,都不会产生歧义。

示例:

@Html.HiddenFor(c => c.PaymentStartDate.ToString("o"))

另见 The Round-trip ("O", "o") Format Specifier