.NET MVC Custom Date Date Validator - PullRequest
       20

.NET MVC Custom Date Date Validator

12 голосов
/ 01 сентября 2010

Завтра я буду заниматься написанием пользовательского класса проверки даты для приложения для собраний, над которым я работаю на работе, которое будет проверять, если заданная начальная или конечная дата A) меньше текущей даты или B) начальная датадата больше даты окончания собрания (или наоборот).

Я думаю, что это, вероятно, довольно распространенное требование.Может ли кто-нибудь указать мне направление в блоге, который может помочь мне в решении этой проблемы?

Я использую .net 3.5, поэтому я не могу использовать API-интерфейс валидатора новой модели, встроенный в .NET 4Проект, над которым я работаю, - это MVC 2.

ОБНОВЛЕНИЕ: классу, который я пишу, необходимо расширить пространство имен System.ComponentModel.DataAnnotations.В .NET 4 есть интерфейс IValidateObject, который вы можете реализовать, что делает подобные вещи бесполезными, но, к сожалению, я не могу использовать .Net 4. Как мне поступить так же в .Net 3.5?

Ответы [ 3 ]

21 голосов
/ 01 сентября 2010
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;
        }
    }

и в вашей модели просмотра:

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

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

В вашем действии просто проверьте, что ModelState.IsValid. Это то, что вы ищете?

4 голосов
/ 02 ноября 2011

Я знаю, что этот пост старше, но это решение, которое я нашел, намного лучше.

Принятое в этом посте решение не будет работать, если у объекта есть префикс, когда он является частью модели представления.

, т.е. строки

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

лучшерешение можно найти здесь: http://www.a2zdotnet.com/View.aspx?Id=182

0 голосов
/ 01 сентября 2010

Я думаю, это должно сделать это:

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

      return start > end || end < start;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...