2017-02-09 6 views
-2

不正な検証でdatetimeフィールドを有効にするために試行錯誤しています。MVC Unobtrusive ValidationでDateTimeを正しく妥当性検証する方法はありますか?

入力が01/01/2017 10:00であれば、私は、フィールドが、[フィールド識別子]日付でなければなりません

を取得します。

ただし、フィールドは日付ではなく、datetimeである必要があります。

パラメータは、私のモデルでは、このように設定されている:

[Display(Name = "Start")] 
    [DataType(DataType.DateTime)] 
    public DateTime start { get; set; } 

私はcorrectally日時入力してフィールドを検証することができませんでした。

どうすればいいですか?

+0

あなたが表示したコードは、クライアント側の検証エラーが '01/01/2017 10:00 '(' $ .validator'で 'date'メソッドをオーバーライドしたのでない限り)。クライアント側でエラーが発生した場合は、有効な日付ではない値を入力したためです。 –

+0

これはカルチャーエラーと思われますが、web.configで正しいカルチャを設定しても、クライアントのバリデーションでは、ローカライズされたカルチャではなくMM/dd/yyyyの日付が必要です。 –

+0

サーバー内のカルチャはブラウザに影響しません。デフォルトでは、 'jquery.validate.js'はMM/dd/yyyy形式の日付を検証します。しかし、 '01/01/2017 10:00'は 'MM/dd/yyyy'または' dd/MM/yyyy'のいずれかで渡されます)。一方、あなたの入力が '20/1/2017'(1月20日)であるとすると、クライアント側のエラーが生成されます。そのような場合は、バリデーターを再設定するだけで済みます。しかし、これはあなたが州に質問するものではありません。それがあなたが経験しているものであれば、質問を編集してください。私はあなたにそれを解決する答えを与えることができます。 –

答えて

1

DataTypeを指定しても検証は行われません。それが行うのは、どのような入力が期待されているかについてのヒントをブラウザに提供することだけです。検証するには、次のように正規表現バリデーターを追加してみてください:

[RegularExpression(@"^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2})) (20|21|22|23|[0-1]?\d):[0-5]?\d$", ErrorMessage = "Date must be in the format of : dd/mm/yyyy hh:mm"] 
[Display(Name = "Start")] 
[DataType(DataType.DateTime)] 
public DateTime start { get; set; } 
関連する問題