我有2个特定的日期验证要求。 1)日期字段应该是强制性的 2)不接受无效日期。
当日期为空时,我想显示“需要日期”
当日期无效时,我想显示“日期无效”
所以指导我怎么能这样做。
这里我尝试编写代码,但不知道它是否有效。
public class Student
{
[Required(ErrorMessage = "DOB require")]
[Display(Name = "DOB :")]
[DataType(DataType.Date)]
public DateTime Dob { get; set; }
}
帮助我在客户端实现这一点。感谢
[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; }
这里有关于上述代码的几个问题
此代码不清楚
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)这条线会做什么
return dateTime.TimeOfDay == TimeSpan.Zero;
3)这一行的含义是什么
else if(value.GetType()== typeof(Nullable))
4)以下代码的含义是什么
DateTime? dateTime = (DateTime?)value;
return !dateTime.HasValue
|| dateTime.Value.TimeOfDay == TimeSpan.Zero;
请详细指导我,了解你所编写的代码。感谢
答案 0 :(得分: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))
检查'value'(对象)的类型是否可以是DateTime!换句话说,它会检查不可为空的日期格式。
2)如果'value'具有有效日期,return dateTime.TimeOfDay == TimeSpan.Zero;
将返回false
TimeSpan.Zero返回TimeSpan零时间(00:00:00)
注意:如果您无法将“值”投射到日期时间,则会将“datetime”值等于TimeSpan.Zero
3)else if (value.GetType() == typeof(Nullable)<DateTime>)
同样的问题1,但检查可空的DateTime(注意:Nullable DateTime和不可为空的DateTime被视为不同的数据类型)
4)
DateTime? dateTime = (DateTime?)value;
return !dateTime.HasValue || dateTime.Value.TimeOfDay == TimeSpan.Zero;
与问题2相同的情况,如果你不能投射到可以为空的DateTime,你的'datetime'等于TimeSpan.Zero