MVC模型验证扩展一个类似Range的日期验证,求高手指点

renyehong 2011-11-05 10:41:32
DatetimeRange类似于Range可以指定日期范围,也可传入int类型的参数
...全文
201 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
renyehong 2011-11-05
  • 打赏
  • 举报
回复
在线等。。。
renyehong 2011-11-05
  • 打赏
  • 举报
回复

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;
}

}
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧