0

日付の検証には2つの特定の要件があります。1) 日付フィールドは必須である必要があります 2) 無効な日付は受け入れられません。

日付が空になると、「日付が必要です」と表示したい

日付が無効になるとき、「日付が無効です」と表示したい

どうすればこれを行うことができるか教えてください。

ここでコードを書いてみましたが、それが機能するかどうかわかりません。

public class Student
    {
        [Required(ErrorMessage = "DOB require")]
        [Display(Name = "DOB :")]
        [DataType(DataType.Date)]
        public DateTime Dob { get; set; }

    }

クライアント側でこれを実装するのを手伝ってください。ありがとう

編集

1 人がこの方法で私を案内します日付形式を検証するには、以下に示すようにカスタム ValidationAttribute を作成することをお勧めします

[AttributeUsage(AttributeTargets.Property, Inherited = false,
    AllowMultiple = false)]
public sealed class DateOnlyAttribute : ValidationAttribute
{
    public DateOnlyAttribute() :
        base("\"{0}\" must be a date without time portion.")
    {
    }

    public override bool IsValid(object value)
    {
        if (value != null)
        {
            if (value.GetType() == typeof(DateTime))
            {
                DateTime dateTime = (DateTime)value;
                return dateTime.TimeOfDay == TimeSpan.Zero;
            }
            else if (value.GetType() == typeof(Nullable<DateTime>))
            {
                DateTime? dateTime = (DateTime?)value;
                return !dateTime.HasValue
                    || dateTime.Value.TimeOfDay == TimeSpan.Zero;
            }
        }
        return true;
    }

    public override string FormatErrorMessage(string name)
    {
        return string.Format(CultureInfo.CurrentCulture,
            ErrorMessageString, name);
    }
}

そして、以下に示すように、データ注釈として使用できます

  [DateOnly]
public DateTime Dob { get; set; }

しかし、私はMVCが初めてなので、上記のコードは私には明確ではありません

上記のコードに関するいくつかの質問があります

このコードは明確ではありません

public override bool IsValid(object value)
    {
        if (value != null)
        {
            if (value.GetType() == typeof(DateTime))
            {
                DateTime dateTime = (DateTime)value;
                return dateTime.TimeOfDay == TimeSpan.Zero;
            }
            else if (value.GetType() == typeof(Nullable<DateTime>))
            {
                DateTime? dateTime = (DateTime?)value;
                return !dateTime.HasValue
                    || dateTime.Value.TimeOfDay == TimeSpan.Zero;
            }
        }
        return true;
    }

1)これが真の場合、何が返されますか

if (value.GetType() == typeof(DateTime))

2) この行が何をするか

dateTime.TimeOfDay == TimeSpan.Zero を返します。

3) この行の意味は何ですか?

そうでなければ (value.GetType() == typeof(Nullable))

4)この以下のコードの意味は何ですか

DateTime? dateTime = (DateTime?)value;
                return !dateTime.HasValue
                    || dateTime.Value.TimeOfDay == TimeSpan.Zero;

あなたが書いたコードを理解するために私を詳細に案内してください。ありがとう

4

1 に答える 1

1

クライアント側の検証が必要な .cshtml ファイルに次のコードを含めます。

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

編集

あなたが尋ねた最後の4つの質問の説明、

1) if (value.GetType() == typeof(DateTime))「値」(オブジェクト) のタイプが DateTime であるかどうかをチェックします。つまり、null 不可の日付形式をチェックします。

2) return dateTime.TimeOfDay == TimeSpan.Zero;'value' が有効な日付 TimeSpan.Zero の場合は false を返します。Zero はゼロ時刻 (00:00:00) の TimeSpan を返します。ゼロ

3)else if (value.GetType() == typeof(Nullable)<DateTime>)質問 1 と同じケースですが、null 許容の DateTime をチェックします (注: Null 許容の DateTime と null 許容でない DateTime は異なるデータ型として扱われます)

4)

    DateTime? dateTime = (DateTime?)value;
    return !dateTime.HasValue || dateTime.Value.TimeOfDay == TimeSpan.Zero;

質問 2 と同じケースです。null 許容の DateTime にキャストできない場合、「datetime」は TimeSpan.Zero と等しくなります。

于 2013-09-17T08:49:45.703 に答える