日付の検証には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;
あなたが書いたコードを理解するために私を詳細に案内してください。ありがとう