62,046
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace System.ComponentModel.DataAnnotations
{
/// <summary>
/// 关于返回值形式的枚举
/// </summary>
public enum DateTimeRangeType
{
/// <summary>
/// 年数
/// </summary>
Year,
/// <summary>
/// 月数
/// </summary>
Month,
/// <summary>
/// 天数
/// </summary>
Day,
/// <summary>
/// 分钟
/// </summary>
Minute
}
/// <summary>
/// 时间范围限制(相对当前时间)
/// </summary>
public class DateTimeRange : ValidationAttribute
{
private DateTimeRangeType _type = DateTimeRangeType.Day;
/// <summary>
/// 可选
/// </summary>
public int Min { get; set; }
/// <summary>
/// 可选
/// </summary>
public int Max { get; set; }
/// <summary>
/// 可选 默认DateTimeRangeType
/// </summary>
public DateTimeRangeType Type
{
get
{
return _type;
}
set
{
_type = value;
}
}
/*
public static bool DateTimeRangeAttribute(Type Type,int minDateTime,int maxDateTime)
{
return true;
}*/
/// <summary>
/// ErrorMessage = "{0}必须在{1}和{2}之间"
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public override bool IsValid(object value)
{
if (!(value is DateTime))
{
throw new Exception("字段必须为时间类型");
}
var dateValue = (DateTime)value;
//if (String.IsNullOrEmpty(ErrorMessage))
//ErrorMessage = "{0}必须在{min}和{max}之间";
if (Min != 0)
{
DateTime minDateTime = GetDateTime(_type, Min);
//ErrorMessage = ErrorMessage.Replace("{min}", _type == DateTimeRangeType.Minute ? minDateTime.ToString() : minDateTime.ToShortDateString());
if (dateValue < minDateTime)
return false;
}
if (Max != 0)
{
DateTime maxDateTime = GetDateTime(_type, Max);
//ErrorMessage = ErrorMessage.Replace("{max}", _type == DateTimeRangeType.Minute ? maxDateTime.ToString() : maxDateTime.ToShortDateString());
if (dateValue > maxDateTime)
return false;
}
return true;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <param name="validationContext"></param>
/// <returns></returns>
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
validationContext.ObjectType.GetProperty("").GetValue(validationContext.ObjectInstance, null);
return base.IsValid(value, validationContext);
}
/// <summary>
///
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public override string FormatErrorMessage(string name)
{
return base.FormatErrorMessage(name);
}
/// <summary>
///
/// </summary>
/// <param name="type"></param>
/// <param name="diff"></param>
/// <returns></returns>
private DateTime GetDateTime(DateTimeRangeType type, int diff)
{
switch (type)
{
case DateTimeRangeType.Minute:
{
return DateTime.Now.AddMinutes(diff);
}
case DateTimeRangeType.Day:
{
return DateTime.Now.Date.AddDays(diff);
}
case DateTimeRangeType.Month:
{
return DateTime.Now.Date.AddMonths(diff);
}
case DateTimeRangeType.Year:
{
return DateTime.Now.Date.AddYears(diff);
}
}
return DateTime.Now;
}
}
}