2016-09-28 37 views
1

我有一系列的MVC網頁表單。最近在對網站進行了一些更新之後,DateTime字段驗證假定日期採用美國格式,因此大於12的日期未通過驗證,儘管事實上我已將編輯日期格式,驗證代碼和區域性文件指定爲en- GB。嘗試過各種瀏覽器,所有的語言都設置爲英文(英國),並且Firefox,Chrome和Edge的驗證失敗,並且只能在IE中使用。嘗試了各種其他建議,包括ModelBinding,但似乎沒有任何工作。.NET MVC英國日期格式不會驗證,儘管文化en-GB

在類:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 

在web.config中:

<globalization culture="en-GB" uiCulture="en-GB" requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="false" /> 

在global.asax中:

CultureInfo newCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone(); 
newCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; 
newCulture.DateTimeFormat.DateSeparator = "/"; 
Thread.CurrentThread.CurrentCulture = newCulture; 
Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo("en-GB"); 
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); 

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

其他建議?

+0

在global.asax中,'newCulture'的含義是什麼?它被覆蓋2行後。 – kiziu

+0

@ kiziu,我拼命嘗試每一個我遇到的建議! – Chelle

回答

1

我得到這個與MVC 5.正常工作,有需要的兩個變化:

  1. 要添加一個模型綁定,爲默認的粘結劑沒有考慮到的CurrentUICulture。我做了這個客戶端驗證刪除只是爲了測試它。之所以沒有默認,是因爲你可能會在URL中使用日期,但我認爲如果我這樣做了,我想要沿着yyyy-mm-dd行格式化URL。
  2. 要更改客戶端驗證以考慮英國日期。我不確定你的jquery.validate.js代碼可以工作。我也遇到了一些麻煩,所以最後我安裝了nuget包jQuery.Validation.AdditionalMethods並製作了使用它的代碼。

我自己的博客文章http://www.ablogaboutcoding.com/2017/08/12/mvc-uk-date-issues/進一步解釋。