2017-02-02 14 views
6

私のASP MVC 5 Webアプリケーションでは、特定の形式で日付を表示する必要があります。ページが読み込まれると、テキストが正しくフォーマットされます。あなたが値を編集したり、単純に投稿しようとした場合でも、検証エラーが表示されます。ASP MVC 5日付形式の検証問題

enter image description here

フィールドがこのように定義されています

:のviewmodelプロパティは次のように定義されて

 @*Creation*@ 
    <div class="form-group"> 
     @Html.LabelFor(model => model.Creation, new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.TextBoxFor(model => model.Creation, "{0:dd/MM/yyyy}", new { @class = "form-control"}) 
      @Html.ValidationMessageFor(m => m.Creation) 
     </div> 
    </div> 

 [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
    [Display(Name = "Creation", ResourceType = typeof(Resources.Resources))] 
    public DateTime Creation { get; set; } 

スクリーンショットはFirefoxブラウザを使用して作成されました。私がEdgeで同じことをすると、バリデーションは成功しますが、postメソッドに対するこのプロパティのバインディングは無効です(デフォルトの日付値)。

この問題を解決するにはどうすればよいですか?

+1

を'MM/dd/yyyy'に基づいて日付を検証する)、バリデータをオーバーライドする必要があります([この回答](http://stackoverflow.com/questions/30594128/error-in-date-validation-mvc/30609111 #30609111)詳細については –

+1

Edge(とChrome)で動作するのは、あなたが '[DataType(DataType.Date)] DatePickerのブラウザの実装が表示されることを意味する 'type =" date "を生成しますが、正しく動作させるには' DataFormatString = "{0:yyyy-MM-dd}"(ISOフォーマット) –

+1

クライアント側のビューに含めることができるスクリプトも含まれている[この回答](http://stackoverflow.com/questions/39677035/date-of-birth-validation-keeps-showing/39682410#39682410)を参照してください検証。 –

答えて

5

ここでの問題は、舞台裏で検証が実際にjQueryによって実行されていることです。したがって、鍵はjQueryバリデーターに、dd/MM/yyyyの形式を使用することを伝えることです。

これにはいくつかの方法があります。最も簡単な方法は、ちょうどsimpeの微調整で(日付の)検証関数をオーバーライドすることである。

jQuery(function ($) { 
    $.validator.addMethod('date', 
    function (value, element) { 
     $.culture = Globalize.culture("en-AU"); 
     var date = Globalize.parseDate(value, "dd/MM/yyyy", "en-AU"); 
     return this.optional(element) || 
     !/Invalid|NaN/.test(new Date(date).toString()); 
    }); 
}); 

代替はjQueryのためにグローバル化ライブラリを使用することです。 hereを使用できるグローバリゼーション・ライブラリーがあります。

ライブラリを持って、これらのファイルが含ま:次に

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

検証関数オーバーライドします:マット・スピンクスは指摘しているように、この `jquery.validate.js`問題(、

<script type="text/javascript"> 
    $(function() { 
     $.validator.methods.date = function (value, element) { 
      Globalize.culture("en-AU"); // the UK format 
      return this.optional(element) || Globalize.parseDate(value) !== null; 
     } 
    }); 
</script> 
+0

こんにちは@Matt、(NuGetパッケージ経由で)ライブラリをインストールしましたが、手動でファイルを追加して検証機能を無効にしませんでした。私の位置はpt-BRなので、 "en-AU"を "pt"に置き換えました。今、検証は何も得られません。私が30/12/2016dssfdsのような誤った日付を入力した場合、それは検証されません。しかも、バインディングはまだ失敗しています。何か案は? –

+0

すべてのファイルが正しく含まれているかどうかを確認することができます(404はありません)。 –

+0

私はあなたが提案した最もシンプルな方法(シンプルな微調整)も試みましたが、その結果はまったく同じです。検証は行われません。グローバル化パッケージを削除して、それが調整に影響を与えないことを確認しました。 404をチェックするとどういう意味ですか? –