.NET MVC Custom Date Validator

心不动则不痛 提交于 2019-11-27 12:42:28

问题


I'll be tackling writing a custom date validation class tomorrow for a meeting app i'm working on at work that will validate if a given start or end date is A) less than the current date, or B) the start date is greater than the end date of the meeting (or vice versa).

I think this is probably a fairly common requirement. Can anyone point me in the direction of a blog post that might help me out in tackling this problem?

I'm using .net 3.5 so i can't use the new model validator api built into .NET 4. THe project i'm working on is MVC 2.

UPDATE: THe class i'm writing needs to extend the System.ComponentModel.DataAnnotations namespace. In .NET 4 there is a IValidateObject interface that you can implement, that makes this sort of thing an absolute doddle, but sadly i can't use .Net 4. How do i go about doing the same thing in .Net 3.5?


回答1:


public sealed class DateStartAttribute : ValidationAttribute
    {        
        public override bool IsValid(object value)
        {
            DateTime dateStart = (DateTime)value;
            // Meeting must start in the future time.
            return (dateStart > DateTime.Now);
        }
    }

    public sealed class DateEndAttribute : ValidationAttribute
    {
        public string DateStartProperty { get; set; }
        public override bool IsValid(object value)
        {
            // Get Value of the DateStart property
            string dateStartString = HttpContext.Current.Request[DateStartProperty];
            DateTime dateEnd = (DateTime)value;
            DateTime dateStart = DateTime.Parse(dateStartString);

            // Meeting start time must be before the end time
            return dateStart < dateEnd;
        }
    }

and in your View Model:

[DateStart]
public DateTime StartDate{ get; set; }

[DateEnd(DateStartProperty="StartDate")]
public DateTime EndDate{ get; set; }

In your action, just check that ModelState.IsValid. That what you're after?




回答2:


I know this post is older, but, this solution I found is much better.

The accepted solution in this post won't work if the object has a prefix when it is part of a viewmodel.

i.e. the lines

// Get Value of the DateStart property
string dateStartString = HttpContext.Current.Request[DateStartProperty];

A better solution can be found here: http://www.a2zdotnet.com/View.aspx?Id=182




回答3:


I think this should do it:

public boolean MeetingIsValid( DateTime start, DateTime end )
{
      if( start < DateTime.Now || end < DateTime.Now )
          return false;

      return start > end || end < start;
}


来源:https://stackoverflow.com/questions/3614076/net-mvc-custom-date-validator

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!