2012-10-11 49 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(); 
    } 
});