MVC模型验证扩展一个类似Range的日期验证,求高手指点 DatetimeRange类似于Range可以指定日期范围,也可传入int类型的参数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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; } }} jquery-ui dialog buttons 按钮动态名称的问题 求正则表达式 ASP.NET按钮失效的问题 请教一个c++代码(关于象棋程序)怎样运行的问题? 关于byte[]的问题。 求信誉好的手机支付平台 关于dropdownlist的查询数据绑订到gridview上 浮点运算和“%”问题求助~! net sql中的游标基本在什么时候才会用到? 关于图片请求的问题 Ajax 下如何获取RUL后面的参数 正则截取省市区(C#)
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;
} }
}