1

我对 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”的值,它工作正常。但是如何强制使用我想要的日期时间格式?

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

4

4 回答 4

6

我想这个答案可能会解决你的问题

将 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());
     }

根据您的要求修改它们

于 2013-10-23T05:31:31.317 回答
0

对我有帮助的是:

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

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

于 2013-10-23T07:00:22.697 回答
0

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;
                }
            });

这样它的侵入性较小。

于 2016-11-21T07:52:40.857 回答
-1

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

这个答案可以提供帮助。

于 2013-10-22T22:00:34.293 回答