如何使用数据注释验证客户端模型中的日期

时间:2013-09-17 08:04:29

标签: asp.net-mvc-3

我有2个特定的日期验证要求。 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)这条线会做什么

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;

请详细指导我,了解你所编写的代码。感谢

1 个答案:

答案 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