热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MVC日期比较(转)

Specifiesthatthefieldmustcomparefavourablywiththenamedfield,ifobjectstocheckarenotofthes

 ///

    /// Specifies that the field must compare favourably with the
named field, if objects to check are not of the same type

    /// false will be return

    ///

    public class CompareValuesAttribute :
ValidationAttribute

    {

        ///

        /// The other property to compare to

        ///

        public string OtherProperty { get; set; }

 

        public CompareValues Criteria { get; set;
}

 

        ///

        /// Creates the attribute

        ///

        /// The other
property to compare to

        public CompareValuesAttribute(string
otherProperty, CompareValues criteria)

        {

            if (otherProperty == null)

                throw new
ArgumentNullException("otherProperty");

 

            OtherProperty =
otherProperty;

            Criteria = criteria;

        }

 

        ///

        /// Determines whether the specified value of
the object is valid.  For this to be the case, the objects must be of the
same type

        /// and satisfy the comparison criteria. Null
values will return false in all cases except when both

        /// objects are null.  The objects will
need to implement IComparable for the GreaterThan,LessThan,GreatThanOrEqualTo
and LessThanOrEqualTo instances

        ///

        /// The value of the
object to validate

        /// The
validation context

        /// A validation result if the
object is invalid, null if the object is valid

        protected override ValidationResult
IsValid(object value, ValidationContext validationContext)

        {

            // the the other property

            var property =
validationContext.ObjectType.GetProperty(OtherProperty);

 

            // check it is not null

            if (property == null)

                return new
ValidationResult(String.Format("Unknown property: {0}.", OtherProperty));

 

            // check types

            var memberName =
validationContext.ObjectType.GetProperties().Where(p =>
p.GetCustomAttributes(false).OfType().Any(a => a.Name
== validationContext.DisplayName)).Select(p =>
p.Name).FirstOrDefault();

            if (memberName == null)

            {

                memberName =
validationContext.DisplayName;

            }

            if
(validationContext.ObjectType.GetProperty(memberName).PropertyType !=
property.PropertyType)

                return new
ValidationResult(String.Format("The types of {0} and {1} must be the same.",
memberName, OtherProperty));

 

            // get the other value

            var other =
property.GetValue(validationContext.ObjectInstance, null);

 

            // equals to comparison,

            if (Criteria ==
CompareValues.EqualTo)

            {

                if
(Object.Equals(value, other))

                   
return null;

            }

            else if (Criteria ==
CompareValues.NotEqualTo)

            {

                if
(!Object.Equals(value, other))

                   
return null;

            }

            else

            {

                // check that both
objects are IComparables

                if (!(value is
IComparable) || !(other is IComparable))

                   
return new ValidationResult(String.Format("{0} and {1} must both implement
IComparable", validationContext.DisplayName, OtherProperty));

 

                // compare the
objects

                var result =
Comparer.Default.Compare(value, other);

 

                switch
(Criteria)

                {

                    case
CompareValues.GreaterThan:

                   
    if (result > 0)

                   
        return null;

                   
    break;

                    case
CompareValues.LessThan:

                   
    if (result <0)

                   
        return null;

                   
    break;

                    case
CompareValues.GreatThanOrEqualTo:

                   
    if (result >= 0)

                   
        return null;

                   
    break;

                    case
CompareValues.LessThanOrEqualTo:

                   
    if (result <= 0)

                   
        return null;

                   
    break;

                }

            }

 

            // got this far must mean the
items don‘t meet the comparison criteria

            return new
ValidationResult(ErrorMessage);

        }

    }

 

    ///

    /// Indicates a comparison criteria used by the CompareValues
attribute

    ///

    public enum CompareValues

    {

        EqualTo,

        NotEqualTo,

        GreaterThan,

        LessThan,

        GreatThanOrEqualTo,

        LessThanOrEqualTo

    }


 

 

应用的时候直接在指定的属性上添加此CompareValuesAttribute标签即可

 

【注:第一个参数是要与之比较的属性名,第二个参数表示两个属性值之间的大小关系,第三个参数表示错误提示信息】

 


public class EricSunModel

{

    [Display(Name = "Ready Time")]

    public string ReadyTime { get; set; }

 

    [CompareValues("ReadyTime", CompareValues.GreaterThan,
ErrorMessage = "Close time must be later than ready time")]

    [Display(Name = "Close Time")]

    public string CloseTime { get; set; }

MVC日期比较(转),布布扣,bubuko.com


推荐阅读
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • 本文探讨了在使用Selenium进行自动化测试时,由于webdriver对象实例化位置不同而导致浏览器闪退的问题,并提供了详细的代码示例和解决方案。 ... [详细]
  • 本文介绍如何在 C++ 中使用链表结构存储和管理数据。通过具体示例,展示了静态链表的基本操作,包括节点的创建、链接及遍历。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 本文探讨了在C++中如何有效地清空输入缓冲区,确保程序只处理最近的输入并丢弃多余的输入。我们将介绍一种不阻塞的方法,并提供一个具体的实现方案。 ... [详细]
  • 算法题解析:最短无序连续子数组
    本题探讨如何通过单调栈的方法,找到一个数组中最短的需要排序的连续子数组。通过正向和反向遍历,分别使用单调递增栈和单调递减栈来确定边界索引,从而定位出最小的无序子数组。 ... [详细]
  • 本文深入探讨了线性代数中向量的线性关系,包括线性相关性和极大线性无关组的概念。通过分析线性方程组和向量组的秩,帮助读者理解这些概念在实际问题中的应用。 ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
  • 解决Anaconda安装TensorFlow时遇到的TensorBoard版本问题
    本文介绍了在使用Anaconda安装TensorFlow时遇到的“Could not find a version that satisfies the requirement tensorboard”错误,并提供详细的解决方案,包括创建虚拟环境和配置PyCharm项目。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
author-avatar
和雅竹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有