2012-10-11 51 views
6

我在设置验证日期格式时遇到问题Chrome在asp.net mvc中,对于其他浏览器如IE,Firefox工作正常。Asp.net MVC集合验证日期格式在Chrome上失败

我已经在我的模型像下面的代码定义的日期:

[Required] 
[Display(Name = "Data fi publicació")] 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
public DateTime PublishingEndDate { get; set; } 

在我的观点:

@Html.TextBoxFor(model => model.PublishingEndDate) 
@Html.ValidationMessageFor(model => model.PublishingEndDate) 

问题似乎@Html.ValidationMessageFor,验证与格式MM/dd/yyyy日期,但什么我想要验证欧洲格式dd/MM/yyyy。我如何将默认文化验证格式日期更改为dd/MM/yyyy

感谢您的帮助

+0

在这里问了一个类似的问题:http://stackoverflow.com/questions/5199835/mvc-3-jquery-validation-globalizing-of-number-decimal-field –

回答

21

最后,我发现这个问题只影响浏览器,用IE,Firexfox它完美的作品,这似乎是一个镀铬的错误,我发现在http://forums.asp.net/t/1729179.aspx/1

解决方案的jQuery的验证方法有使用下面的代码进行重写:

$(document).ready(function() { 
    $('.calendarPicker').datepicker({ dateFormat: "dd/mm/yy" }); 

$.validator.addMethod('date', 
    function (value, element, params) { 
     if (this.optional(element)) { 
      return true; 
     } 

     var ok = true; 
     try { 
      $.datepicker.parseDate('dd/mm/yy', value); 
     } 
     catch (err) { 
      ok = false; 
     } 
     return ok; 
    }); 
}); 
+0

我的问题是,如果我在日期选择器中选择第二个日期,它会给我一个验证错误 - 仅在Chrome中(使用40.0.2214.115)。这个解决方案在原始问题后将近三年后就已经修复了!好一个! – ComfortablyNumb

0

帮我:

$(function() { 
      $(".datepicker").datepicker({ 
       todayBtn: true, 
       language: "en-GB", 
       format: "dd/mm/yyyy", 
       clearBtn: true, 
       pickTime: false 
      }); 

      $.validator.addMethod("date", 
       function(value, element) { 
        return this.optional(element) || parseDate(value, "dd-MM-yyyy") !== null; 
       }); 
     }); 
0

为避免客户端验证,您不希望任何与输入关联的数据val属性。因此,我所做的,而不是写下来纯HTML使用TextFor或EditorFor等...

<input type="text" class="datepicker form-control"> 

正常工作......

0

如果你不想使用日期时间选择器:

客户端验证问题可以在jquery.validate.unobtrusive.min.js不以任何方式接受日期/日期格式,因为MVC的bug(即使在MVC 5)的发生。不幸的是,你必须手动解决它。

我终于工作液:

你必须包括前:

@Scripts.Render("~/Scripts/jquery-3.1.1.js") 
@Scripts.Render("~/Scripts/jquery.validate.min.js") 
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") 
@Scripts.Render("~/Scripts/moment.js") 

可以使用安装moment.js:

Install-Package Moment.js 

然后你终于可以添加修复对于日期格式解析器:

$(function() { 
    $.validator.methods.date = function (value, element) { 
     return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid(); 
    } 
});