2013-08-31 80 views
11

我遇到了一個日期時間字段的客戶端驗證問題。當我嘗試提交時,一直告訴我日期無效(27/7/2013)。但如果我將日期轉換爲美國格式,它將起作用(2013年7月27日)。MVC 4如何通過客戶端驗證驗證非美國日期?

我的看法模型如下,

[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
public DateTime? AuditDate { get; set; } 

的Index.html

@Html.TextBoxFor(m => m.AuditDate) 

我已經更新我的web.config

<globalization culture="en-AU" uiCulture="en-AU" /> 

有什麼我錯過了?

感謝

+0

** [希望你會發現它有用](http://stackoverflow.com/questions/18142489/how-to-validate-date-in-clientside-using-fluentvalidation/18276353#18276353)** –

+0

對不起我沒有覺得它有用,我沒有使用任何流利的驗證器 – user2206329

+0

看看http://stackoverflow.com/questions/11272851/format-datetime-in-asp-net-mvc-4?rq=1,接受的答案應該可以解決問題。 –

回答

25

別人整理這對我來說,這是所有做的客戶端jQuery驗證。 再次感謝asymptoticFault ..你..搖滾 MVC 4 date culture issue?

下面是從鏈接,我用的信息...

的問題是解析日期時不考慮文化的jQuery驗證。如果關閉客戶端驗證,那麼在知道文化的服務器上就可以很好地解析日期。

解決的辦法是重寫日期的jQuery驗證幷包含額外的jQuery全球化插件。你可以找到全球化插件here。您也可以使用Nuget Package Manager輕鬆下載插件。我剛剛打開了包管理器,選擇了左側的Online選項卡,並在搜索中鍵入了「globalize」,這是第一個結果。一旦你安裝我包括這兩個文件:

globalize.js 
globalize.culture.en-AU.js 

您可以包括他們直接使用腳本標記或將它們放在一個包,也許與其他jQuery驗證文件。

一旦你擁有了這些,你將需要添加下面的腳本來覆蓋jQuery驗證日期:

<script type="text/javascript"> 
    $(function() { 
     $.validator.methods.date = function (value, element) { 
      Globalize.culture("en-AU"); 
      // you can alternatively pass the culture to parseDate instead of 
      // setting the culture above, like so: 
      // parseDate(value, null, "en-AU") 
      return this.optional(element) || Globalize.parseDate(value) !== null; 
     } 
    }); 
</script> 
+0

如果您在這裏提供了答案的要點以及鏈接消失的情況,那將會很不錯。 – Kugel

+0

非常好,我錯過了文化thingy .. – radbyx

+0

它工作正常,但是當我用Nuget下載Globalizejs(https://www.nuget.org/packages/jquery-globalize/)文件「globalize.culture.en -AU.js「不在那裏,但沒有必要。 它工作正常與「globalize.js」 –

-2

這種嘗試,

查看

<div> 
       @Html.LabelFor(m => m.DOB) 
       @Html.TextBoxFor(m => m.DOB, new { @Formate = "dd/MM/yyyy" }) 
       @Html.ValidationMessageFor(m => m.DOB) 

      </div> 

型號

[DisplayName("Date Of Birth")][DataType(DataType.Date)] 
public DateTime DOB { get; set; } 
+0

同樣的結果..不起作用......當然,它肯定不是那麼複雜,改變了文化 – user2206329

+0

這不解決客戶端驗證中的錯誤,這是問題 –

5

客戶端驗證問題可以在jQuery的,因爲MVC的bug(即使在MVC 5)的發生。 validate.unobtrusive.min.js其中不接受日期/日期時間格式。不幸的是,你必須手動解決它。

我終於工作液:

你必須包括前:

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

非常好。我只從DD.MM.YYYY更改爲DD/MM/YYYY。 –

+0

謝謝,隨意使用任何你想要的日期格式(moment.js可以處理我想要的一切)。 :) – lukyer