Передача данных из модели в пользовательский класс проверки - PullRequest
3 голосов
/ 02 сентября 2010

У меня есть класс проверки данных, который проверяет, предшествует ли дата начала собрания дате окончания.

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

Вот мой класс проверки

sealed public class StartLessThanEndAttribute : ValidationAttribute
    {            
        public DateTime DateEnd { get; set; }

        public override bool IsValid(object value)
        {                
            DateTime end = DateEnd;
            DateTime date = (DateTime)value;

            return (date < end);
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name);
        }
    }

Вот класс, который содержит аннотации данных

[StartLessThanEnd(ErrorMessage="Start Date must be before the end Date")]
public DateTime DateStart { get; set; }

А вот и мой контроллер

[HttpPost, Authorize]
    public ActionResult Create(Pol_Event pol_Event)
    {
        ViewData["EventTypes"] = et.GetAllEventTypes().ToList();

        StartLessThanEndAttribute startDateLessThanEnd = new StartLessThanEndAttribute();


        startDateLessThanEnd.DateEnd = pol_Event.DateEnd;


        if (TryUpdateModel(pol_Event))
        {
            pol_Event.Created_On = DateTime.Now;
            pol_Event.Created_By = User.Identity.Name;

            eventRepo.Add(pol_Event);
            eventRepo.Save();
            return RedirectToAction("Details", "Events", new { id = pol_Event.EventID });
        }

        return View(pol_Event);
    }

1 Ответ

3 голосов
/ 02 сентября 2010

Атрибуты проверки, которые работают с несколькими свойствами, должны применяться к модели, а не к отдельным свойствам:

[AttributeUsage(AttributeTargets.Class)]
public class StartLessThanEndAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var model = (MyModel)value;
        return model.StartDate < model.EndDate;
    }
}

[StartLessThanEnd(ErrorMessage = "Start Date must be before the end Date")]
public class MyModel
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...