.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);
}
}