.NET MVC Custom Date Date Validator

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

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

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

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

5 ответов

Решение
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. Это то, что вы после?

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

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

то есть линии

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

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

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

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

      return start > end || end < start;
}
      public ActionResult Index(vmemployee vme)

    {

        emplyee emp = new emplyee();
        vme.cities = new List<city>();

        vme.countries = new List<country>();

        vme.departments = new List<department>();

        Hrcontext context = new Hrcontext();
        vme.countries = context.cntentity.ToList();
        vme.cities = context.cityentity.ToList();
        vme.departments = context.deptentity.ToList();

        return View("employeelist", vme);
    }

    public ActionResult Index1(vmemployee vm)
    {

        vm.liemp = new List<emplyee>();
        return View("Searchemployee", vm);

    }
    [submit(Name = "sav")]
    public ActionResult save(vmemployee vme)
    {
        vme.cities = new List<city>();
        vme.countries = new List<country>();
        vme.departments = new List<department>();



        Hrcontext context = new Hrcontext();
        vme.countries = context.cntentity.ToList();
        vme.cities = context.cityentity.ToList();
        vme.departments = context.deptentity.ToList();
        vme.emp.Imagefile.SaveAs(@"C:\inetpub\wwwroot\hrsestem\hrsestem\images\" + vme.emp.Imagefile.FileName);
        vme.emp.Imagepath= (@"C:\inetpub\wwwroot\hrsestem\hrsestem\images\" + vme.emp.Imagefile.FileName);

        if (ModelState.IsValid == true)
        {
            context.empentity.Add(vme.emp);
            context.SaveChanges();
        }
        return View("employeelist", vme);
    }
      public ActionResult Index()
    {
        
        return View("department1");
    }
    public ActionResult Savedata(Vmdepartment vm)
    {

        Hrcontext context = new Hrcontext();
        context.deptentity.Add(vm.dept);
        context.SaveChanges();

        return View("department1", vm);
    }
    public ActionResult Index1(Vmdepartment vm)
    {
        vm.liDepartment = new List<department>();
        
        return View("departmentview",vm);
    }

    public ActionResult search(Vmdepartment vm) {
        var n = vm.dept.name;
        vm.liDepartment = new List<department>();
        Hrcontext context = new Hrcontext();
        vm.liDepartment = context.deptentity.Where(a => a.name == n).ToList();
        return View("departmentview",vm);

    }
}
Другие вопросы по тегам