我有两个具体的日期验证要求。1)日期字段应该是强制性的,2)无效日期将不被接受。
当日期为空时,我想显示“日期是必需的”。
当日期无效时,我要显示“日期无效”。
所以指导我怎么做。
在这里,我试图写一个代码,但不知道它是否有效。
public class Student
{
[Required(ErrorMessage = "DOB require")]
[Display(Name = "DOB :")]
[DataType(DataType.Date)]
public DateTime Dob { get; set; }
}帮助我在客户端实现这一点。谢谢
编辑
有一个人这样指导我,以便验证日期格式,最好是创建一个自定义的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)这一行的意思是什么?
否则if (value.GetType() == typeof(可空))
4)以下代码的含义是什么?
DateTime? dateTime = (DateTime?)value;
return !dateTime.HasValue
|| dateTime.Value.TimeOfDay == TimeSpan.Zero;请详细指导我理解你所写的代码。谢谢
发布于 2013-09-17 08:49:45
在需要客户端验证的.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>编辑
你问的最后四个问题的解释,
1) if (value.GetType() == typeof(DateTime))检查'value'(object)的类型是否可以是DateTime!换句话说,它检查非空日期格式。
2) return dateTime.TimeOfDay == TimeSpan.Zero;返回false如果' value‘有一个有效日期,则TimeSpan.Zero为零时间(00:00:00)返回TimeSpan。注意:如果不能将“值”转换到日期时间,则可以得到等于TimeSpan.Zero的“日期时间”值。
3) else if (value.GetType() == typeof(Nullable)<DateTime>)相同情况为问题1,但检查可空DateTime (注:可空DateTime和非空DateTime被视为不同的数据类型)
4)
DateTime? dateTime = (DateTime?)value;
return !dateTime.HasValue || dateTime.Value.TimeOfDay == TimeSpan.Zero;与问题2相同的情况是,如果不能转换为可空的DateTime,则“datetime”等于TimeSpan.Zero
https://stackoverflow.com/questions/18844469
复制相似问题