【问题标题】:ASP MVC DateTime Input behaving strange?ASP MVC DateTime 输入行为奇怪?
【发布时间】:2013-12-10 19:27:25
【问题描述】:

我有一个带有 ArrivalDate 属性的模型,其注释为:

[DisplayFormat(DataFormatString = "{0:dd'/'MM'/'yyyy}", ApplyFormatInEditMode = true)]

我还在Web.config 文件中将我的全球化变量设置为:

 <globalization uiCulture="en-GB" culture="en-GB" />

由于某种原因,在我的一个视图上创建编辑器时,它允许各种事情,但不是我所追求的。我正在尝试获取30/12/2013 的格式。

我可以使用:

  • 30/Dec/2013 - 验证并保存良好
  • 20/30/2013 - 通过验证但结果:The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value. The statement has been terminated. 将更改保存到数据库时(预期,但为什么它通过验证)。
  • 30/December/2013 - 验证并保存良好

起初我以为我必须使用小写的m,但这似乎并没有改变什么?

任何人有任何想法,我现在正面临一堵砖墙?

编辑:我应该指出,当使用 30/12/2013 时,它似乎无法通过以下消息验证:The field Arrival Date must be a date.

【问题讨论】:

  • 您为什么要使用日期控制类型?
  • 好问题.. 我现在只使用默认的@Html.EditorFor(model =&gt; model.ArrivalDate),一旦我能正常工作,我会尝试添加一个更漂亮的输入字段。
  • 当您说它通过/失败时,您是否使用了不引人注目的 (JavaScript) 验证,然后您在实际转换为 DateTime 对象时遇到错误?我打算建议您使用标准格式字符串 (msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx),但我现在想知道模型绑定器是否未能将文化设置考虑在内。
  • @ErikNoren 我没有在视图中添加任何花哨的东西。我所做的只是生成一个模型和数据库。从中生成控制器和视图,然后通过代码添加,首先将 ArrivalDate DateTime 属性迁移到模型。现在我正在尝试将该新属性添加到创建表单中。我正在做的一件事(对于某个用户角色是限制一些值并将我自己设置为发布操作。我也在使用ModelState.Clear()(仅在这种情况下,目前这不适用于任何角色的用户) )

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


【解决方案1】:

我已经弄清楚是什么导致了这个问题。

似乎 jQuery(由 ASP 用于验证)中存在一个错误,导致 Google Chrome 中的日期验证无效。

为了解决这个问题,我将以下内容添加到我的 _Layout.cshtml 文件中,包含在脚本下方。

<script type="text/javascript">
    $(document).ready(function () {
        $.validator.addMethod(
            "date",
            function (value, element) {
                var bits = value.match(/([0-9]+)/gi), str;
                if (!bits)
                    return this.optional(element) || false;
                str = bits[1] + '/' + bits[0] + '/' + bits[2];
                return this.optional(element) || !/Invalid|NaN/.test(new Date(str));
            },
            ""
            );
    });
</script>

【讨论】:

    【解决方案2】:

    你已经告诉模型验证器你将使用 d'/'MM'/'yyyy 格式并且你有ApplyFormatInEditMode true。

    【讨论】:

    • 我试过把这个设置为false,好像没什么区别。
    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2014-09-30
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多