質問

モデルメタデータクラスに次のようなプロパティがあります。

[Required(ErrorMessage = "Spent On is required")]
[RegularExpression(@"[0-1][0-9]/[0-3][0-9]/20[12][0-9]", 
   ErrorMessage = "Please enter date in mm/dd/yyyy format")]
[DataType(DataType.Date)]
[DisplayName("Spent On")]
public DateTime SpentOn { get; set; }

しかし、私が電話するたびに ModelState.IsValid Regexが検証していないため、常にFalseを返します。入力日(2010年8月29日)と同じパターンを使用して新しいregexと一致しましたが、完全に一致しています。

私は何が間違っているのですか?

役に立ちましたか?

解決

それは、正規表現が文字列に適用され、そうではないためです DateTime プロパティ。ユーザーが無効な文字列を入力した場合、 DateTime モデルバインダーからインスタンスは、正規表現パターンが実行される前に一般的なエラーメッセージが追加されます。

いくつかの可能性があります:

  1. エラーメッセージをカスタマイズします リソースファイル
  2. カスタムモデルバインダーを書きます
  3. 文字列プロパティを使用します(これを提案したことに対して罪悪感を覚えています:-))

他のヒント

実際には、これには別の回避策があります。 RegularexpressionAttributeを単純にサブクラス化できます

public class DateFormatValidatorAttribute : RegularExpressionAttribute {
    public DateFormatValidatorAttribute()
        : base(@"[0-1][0-9]/[0-3][0-9]/20[12][0-9]") 
        {
            ErrorMessage = "Please enter date in mm/dd/yyyy format";
        }

        public override bool IsValid(object value) {
            return true;
        }
}

Global.asax.csでアプリケーションを開始します登録クライアントサイド検証用のRegularexpression addapterを登録します。

DataAnnotationsModelValidatorProvider.RegisterAdapter(
            typeof(DateFormatValidatorAttribute), 
                typeof(RegularExpressionAttributeAdapter));

これで、ビルドインMVCの定期的な排出検証顧客側を持つことができ、Datetimeをあなたのプロパティタイプとして維持することができます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top