2010-12-29 32 views
1

日付の値をdd/mm/yyyy形式で検証しようとしています。日付を正しい形式で入力してもエラーメッセージが表示されます。それはあなたの属性と共通のものを持っていない、ASP.Net MVC 2.0日付検証が機能しない

[Required(ErrorMessage = "Required Field.")]    
[RegularExpression(@"^((0[1-9])|([1-2][0-9])|3[0-1])\/((0[1-9])|(1[0-2]))\/[0-9]{4}$",ErrorMessage="Please enter in dd/mm/yyyy")] 
[DataType(DataType.Date,ErrorMessage="Please enter date.")] 
public DateTime BeginningDate { get; set; } 
+0

どのエラーメッセージが表示されていますか? –

+0

あなたは何時に入社していますか? – jfar

+0

''28/12/2010'という値はBeginningDateには無効です ' –

答えて

1

あなたが得るエラーメッセージがモデルバインダーから来ている:

は、ここに私のコードです。

public string BeginningDate { get; set;} 

をして、モデルが結合した後、自分でDateTimeに変換します。私はあなたが正規表現をチェックしたい場合は、あなたが使用する必要があること、だと思います。日付は特定の形式で指定する必要がありますが、モデルバインダーはそれほどスマートではなく、web.config/server設定を使用し、エラーをスローします。正規表現でDateTimeの型をチェックするのは意味がありません。なぜなら、文字列ではなく、既にDateTimeであるからです。モデル結合が最初に行われ、次に検証が行われます。

0
public class DateRegexAttribute : RegularExpressionAttribute, IClientValidatable 
    { 
    public DateRegexAttribute(string pattern) 
     : base(pattern) 
    { 
    } 

    public override bool IsValid(object value) 
    { 
     DateTime date; 
     try 
     { 
      date = (DateTime) value; 
     } 
     catch 
     { 
      return false; 
     } 

     var input = date.Date.ToShortDateString(); 

     Match match = Regex.Match(input, Pattern, RegexOptions.IgnoreCase); 

     return match.Success; 
    } 


    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     var rule = new ModelClientValidationRegexRule(ErrorMessageString, Pattern); 
     return new[] { rule }; 
    } 
} 
関連する問題