ASP.NET MVC 2モデルの検証復帰検証因子は失敗します
-
02-10-2019 - |
質問
モデルメタデータクラスに次のようなプロパティがあります。
[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
モデルバインダーからインスタンスは、正規表現パターンが実行される前に一般的なエラーメッセージが追加されます。
いくつかの可能性があります:
- エラーメッセージをカスタマイズします リソースファイル
- カスタムモデルバインダーを書きます
- 文字列プロパティを使用します(これを提案したことに対して罪悪感を覚えています:-))
他のヒント
実際には、これには別の回避策があります。 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をあなたのプロパティタイプとして維持することができます
所属していません StackOverflow