asp.net mvc 3 - Greater Than or Equal To Today Date validation annotation in MVC3 -
has seen mvc3 data annotation date validation requires single selected date equal or greater current date?
if there's third party add on that's cool too. i'm using dataannotationsextensions doesn't offer i'm looking for.
there doesn't seem reference of on. so, hoping has solved before try reinvent wheel , write own custom validator.
i've tried range requires 2 dates , both have constants in string format such [range(typeof(datetime), "1/1/2011", "1/1/2016")] doesn't help. , dataannotationsextensions min validator accepts int , double
update solved
thanks @buildstarted ended , works great server-side , client side script
using system; using system.collections.generic; using system.componentmodel.dataannotations; using system.web.mvc; namespace web.models.validation { [attributeusage(attributetargets.field | attributetargets.property, allowmultiple = false, inherited = true)] public sealed class datemustbeequalorgreaterthancurrentdatevalidation : validationattribute, iclientvalidatable { private const string defaulterrormessage = "date selected {0} must on or after today"; public datemustbeequalorgreaterthancurrentdatevalidation() : base(defaulterrormessage) { } public override string formaterrormessage(string name) { return string.format(defaulterrormessage, name); } protected override validationresult isvalid(object value, validationcontext validationcontext) { var dateentered = (datetime)value; if (dateentered < datetime.today) { var message = formaterrormessage(dateentered.toshortdatestring()); return new validationresult(message); } return null; } public ienumerable<modelclientvalidationrule> getclientvalidationrules(modelmetadata metadata, controllercontext context) { var rule = new modelclientcustomdatevalidationrule(formaterrormessage(metadata.displayname)); yield return rule; } } public sealed class modelclientcustomdatevalidationrule : modelclientvalidationrule { public modelclientcustomdatevalidationrule(string errormessage) { errormessage = errormessage; validationtype = "datemustbeequalorgreaterthancurrentdate"; } } } and in model
[required] [datemustbeequalorgreaterthancurrentdate] public datetime somedate { get; set; } the client side script
/// <reference path="jquery-1.7.2.js" /> jquery.validator.addmethod("datemustbeequalorgreaterthancurrentdate", function (value, element, param) { var somedate = $("#somedate").val(); var today; var currentdate = new date(); var year = currentdate.getyear(); var month = currentdate.getmonth() + 1; // added +1 because javascript counts month 0 var day = currentdate.getdate(); var hours = currentdate.gethours(); var minutes = currentdate.getminutes(); var seconds = currentdate.getseconds(); today = month + '/' + day + '/' + year + ' ' + hours + '.' + minutes + '.' + seconds; if (somedate < today) { return false; } return true; }); jquery.validator.unobtrusive.adapters.addbool("datemustbeequalorgreaterthancurrentdate");
create custom attribute.
public class checkdaterangeattribute: validationattribute { protected override validationresult isvalid(object value, validationcontext validationcontext) { datetime dt = (datetime)value; if (dt >= datetime.utcnow) { return validationresult.success; } return new validationresult(errormessage ?? "make sure date >= today"); } } code written off cuff fix errors :)
Comments
Post a Comment