【问题标题】:ASP.Net MVC4: The field xxx must be a dateASP.Net MVC4:字段 xxx 必须是日期
【发布时间】:2013-10-31 23:41:29
【问题描述】:

我对 EditorFor(DateTime) 函数有疑问。我有一个这样定义的模型:

    [MetadataType(typeof(MessageSearchDTO_Validation))]
    public class MessageSearchDTO
    {
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
    }

    public class MessageSearchDTO_Validation
    {
        [DisplayName("Od")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd HH:mm}")]
        [Required(ErrorMessage = ErrorMessages.FieldRequired)]
        public DateTime StartDate { get; set; }

        [DisplayName("Do")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd HH:mm}")]
        [CustomValidation(typeof(MessageSearchDTO_Validation), "EndDate_CustomValidator")]
        [Required(ErrorMessage = ErrorMessages.FieldRequired)]
        public DateTime EndDate { get; set; }
}

问题是我想要一个带有时间编辑器的完整日期。但它仅适用于 Chrome。在 FF/IE 中,我收到了这个 javascript 验证错误。 如果我设置“10/23/2013 12:00:00 AM”的值,它工作正常。但是如何强制使用我想要的日期时间格式?

我什至尝试实现自定义活页夹,但没有成功,因为这是客户端错误...

【问题讨论】:

    标签: asp.net-mvc-4


    【解决方案1】:

    我猜this answer 可能会解决你的问题

    将 jQuery.validate.js 中的日期验证方法更改为 以下解决了这个问题:

    date: function (value, element) {
             $.culture = Globalize.culture("en-GB");
             var date = Globalize.parseDate(value, "dd/MM/yyyy", "en-GB");
             return this.optional(element) || 
                            !/Invalid|NaN/.test(new Date(date).toString());
         }
    

    根据您的要求修改它们

    【讨论】:

    • 我需要添加Globalize文件或函数吗?
    • 这对我来说非常完美。我在 Safari 浏览器中遇到了这个问题。
    【解决方案2】:

    帮助我的是:

        date: function (value, element) {
            if (value.indexOf(' ') != -1)
                value = value.replace(' ', 'T');
            return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
        },
    

    我不太喜欢它:(难道不修改jquery就可以用一些好方法吗???

    【讨论】:

      【解决方案3】:

      AthibaN 的回答是正确的。您需要包含 globalize.js 和 globalize.yourRegionHere.js

      我的解决方案是在 jquery 加载脚本标签后添加布局文件

        $(function () {
                          $.validator.methods.date = function (value, element) {
                           Globalize.culture("bs-Latn-BA");
      
                   return this.optional(element) || Globalize.parseDate(value)     !== null;
                      }
                  });
      

      这样它的侵入性较小。

      【讨论】:

        【解决方案4】:

        向客户端发送刻度 (DateTime.Ticks) 而不是日期时间字符串。然后使用 javascript 将刻度解析为您想要的日期格式。

        This answer 可以帮忙。

        【讨论】:

        • 发送报价?问题是关于将数据发送回服务器之前的客户端验证。
        • 我的意思是,如果您使用刻度传输日期,您可以使用任何浏览器来处理它。据我了解,您将日期作为字符串发送,例如“10/23/2013 12:00:00 AM”,这可能不是浏览器之间的通用格式,但刻度是通用的。谢谢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        • 2013-03-20
        • 1970-01-01
        • 1970-01-01
        • 2019-08-02
        • 1970-01-01
        • 2015-08-11
        相关资源
        最近更新 更多