0

問題があります...ユーザー登録フォームがあります..このフォームには、生年月日を表す3つのフィールドがあります。私は3つのフィールド(3つのメニュー)を区別するのが好きです。有効な日付かどうかを確認できるバリデーターを作成するにはどうすればよいですか?(2011年2月30日のような日付は受け入れません)JavaScript(クライアント側)でそれを行うことはできますが、model-vew-controllerで通常どおりバリデーターを使用したい場合でも?

4

2 に答える 2

2

プロパティではなくクラスにバリデータをバインドできます。私はそのようなことをします:

//The Model
[DateValidator]
public class Date
{
    public string Month { get; set; }
    public string Day { get; set; }
    public string Year { get; set; }
}

//The DataAnnotation
[AttributeUsage(AttributeTargets.Class)]
class DateValidatorAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var date = value as Date;
        Debug.Assert(date != null);

        var dateString = date.Month + date.Day + date.Year;
        DateTime dateTime;
        var isValid = DateTime.TryParseExact(dateString, "ddMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None,
                                             out dateTime);
        return isValid;
    }
}

編集

DateTime.TryParseExact は、DateTime の有効性をチェックします (つまり、30/02/2011 を解析しようとすると false が返されます)。

于 2011-09-28T13:13:35.530 に答える
0

コンテキストからこれら 3 つのフィールドを取得し、それらを完全に検証するモデル バインダーを作成します。

于 2011-09-28T13:02:02.580 に答える