首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用数据注释在客户端验证我的模型中的日期

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

Stack Overflow用户
提问于 2013-09-17 08:04:29
回答 1查看 1.6K关注 0票数 0

我有两个具体的日期验证要求。1)日期字段应该是强制性的,2)无效日期将不被接受。

当日期为空时,我想显示“日期是必需的”。

当日期无效时,我要显示“日期无效”。

所以指导我怎么做。

在这里,我试图写一个代码,但不知道它是否有效。

代码语言:javascript
复制
public class Student
    {
        [Required(ErrorMessage = "DOB require")]
        [Display(Name = "DOB :")]
        [DataType(DataType.Date)]
        public DateTime Dob { get; set; }

    }

帮助我在客户端实现这一点。谢谢

编辑

有一个人这样指导我,以便验证日期格式,最好是创建一个自定义的ValidationAttribute,如下所示

代码语言:javascript
复制
[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);
    }
}

然后,您可以使用它作为数据注释,如下所示

代码语言:javascript
复制
  [DateOnly]
public DateTime Dob { get; set; }

但是上面的代码对我来说并不清楚,因为我是MVC的新手。

下面是关于上述代码的几个问题

这段代码不清楚

代码语言:javascript
复制
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)以下代码的含义是什么?

代码语言:javascript
复制
DateTime? dateTime = (DateTime?)value;
                return !dateTime.HasValue
                    || dateTime.Value.TimeOfDay == TimeSpan.Zero;

请详细指导我理解你所写的代码。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-17 08:49:45

在需要客户端验证的.cshtml文件中包含以下代码,

代码语言:javascript
复制
<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)

代码语言:javascript
复制
    DateTime? dateTime = (DateTime?)value;
    return !dateTime.HasValue || dateTime.Value.TimeOfDay == TimeSpan.Zero;

与问题2相同的情况是,如果不能转换为可空的DateTime,则“datetime”等于TimeSpan.Zero

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18844469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档