2013-10-22 44 views
1

我有EditorFor(DateTime)函数的问题。我有这样一个定义如下:ASP.Net MVC4:字段xxx必须是日期

[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”的值设置为正常。但我如何强制我想要的日期时间格式?

我甚至试图实现自定义的粘合剂,它没有工作,因为这是客户端错误...

回答

-1

发送蜱(DateTime.Ticks)而不是时间字符串到客户端。然后使用javascript将日期格式解析为日期格式。

This answer可以提供帮助。

+0

发送节拍?问题是在将数据发送回服务器之前关于客户端验证。 –

+0

我的意思是如果你使用蜱传输日期,你可以处理它使用任何浏览器。据我所知,你发送的日期像“10/23/2013 12:00:00 AM”这样的字符串,这可能不是浏览器之间的通用格式,但是蜱是通用的。谢谢。 – mecek

6

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

更改日期确认方法jQuery.validate.js到 follwing解决该问题:

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

修改它们根据您的要求

+0

我需要添加'Globalize'文件或功能吗? – Chlebta

+0

这对我来说非常合适。我在Safari浏览器中遇到了这个问题。 – Liladhar

0

帮助我的是:

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

我不喜欢它非常多:(是不是可以做到这一点很好的方式,而无需修改jquery?

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

这样的较少侵入后在布局文件的补充。

相关问题