Подтвердить что ты не робот

.NET MVC Custom Validator

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

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

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

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

4b9b3361

Ответ 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;
        }
    }

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

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

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

В своем действии просто проверьте, что ModelState.IsValid. Что вы после?

Ответ 2

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

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

то есть. строки

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

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

Ответ 3

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

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

      return start > end || end < start;
}