0

目立たないクライアント側の検証を使用しています。

次のデータ注釈を持つViewModelがあります

[DisplayName("Entrytime")]
[DataType("Time")]
[RegularExpression(@"^(?[0-1]?[0-9]|[2][0-3]):[0-5][0-9]$", ErrorMessageResourceType = typeof(LocalizedResources), ErrorMessageResourceName = "Time")]
public DateTime? EntryTime { get; set; }

問題は、クライアント側の検証が正常に機能し、たとえば 25:20 ではなく 12:20 をフィールドに入力できることです。

しかし、サーバーで ModelState.IsValid に問い合わせると、フィールドでエラーが発生します。

問題は正規表現のコロンの前にあるようです。表現を変えると

[RegularExpression(@"^.*:[0-5][0-9]$",...

それは正常に動作します。

しかし、私が持っている場合

[RegularExpression(@"^[0-2][0-9]:[0-5][0-9]$",...

それはまだサーバー上でそれを受け入れません。変更は、クライアント側の検証で期待どおりに機能します。

クライアント側の正規表現解析とサーバー側の違いはありますか? ちょっとバグっぽい?!

ありがとう

4

1 に答える 1

0

ビューモデルで日時オブジェクトを使用すると問題が発生すると思います。modelbinder は、時刻入力だけから datetime オブジェクトを作成することはできません。私は通常、ビューモデルで文字列を使用します:

[DisplayName("Entrytime")]
[DataType("Time")]
[RegularExpression(@"^(?[0-1]?[0-9]|[2][0-3]):[0-5][0-9]$", ErrorMessageResourceType = typeof(LocalizedResources), ErrorMessageResourceName = "Time")]
public string EntryTime { get; set; }

modelstate が有効な場合は、文字列を解析して datetime オブジェクトに変換します。

于 2011-08-17T13:09:24.050 に答える