Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public sealed class IsDateAfter : ValidationAttribute, IClientValidatable
- {
- private readonly string testedPropertyName;
- private readonly bool allowEqualDates;
- public IsDateAfter(string testedPropertyName, bool allowEqualDates = false)
- {
- this.testedPropertyName = testedPropertyName;
- this.allowEqualDates = allowEqualDates;
- }
- protected override ValidationResult IsValid(object value, ValidationContext validationContext)
- {
- var propertyTestedInfo = validationContext.ObjectType.GetProperty(this.testedPropertyName);
- if (propertyTestedInfo == null)
- {
- return new ValidationResult(string.Format("unknown property {0}", this.testedPropertyName));
- }
- var propertyTestedValue = propertyTestedInfo.GetValue(validationContext.ObjectInstance, null);
- if (value == null || !(value is DateTime))
- {
- return ValidationResult.Success;
- }
- if (propertyTestedValue == null || !(propertyTestedValue is DateTime))
- {
- return ValidationResult.Success;
- }
- // Compare values
- if ((DateTime)value >= (DateTime)propertyTestedValue)
- {
- if (this.allowEqualDates)
- {
- return ValidationResult.Success;
- }
- if ((DateTime)value > (DateTime)propertyTestedValue)
- {
- return ValidationResult.Success;
- }
- }
- return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
- }
- public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
- {
- var rule = new ModelClientValidationRule
- {
- ErrorMessage = this.ErrorMessageString,
- ValidationType = "isdateafter"
- };
- rule.ValidationParameters["propertytested"] = this.testedPropertyName;
- rule.ValidationParameters["allowequaldates"] = this.allowEqualDates;
- yield return rule;
- }
- public virtual DateTime StartDate { get; set; }
- [IsDateAfter("StartDate", true, ErrorMessage="End date needs to be after start date")]
- public virtual DateTime EndDate { get; set; }
- $.validator.unobtrusive.adapters.add(
- 'isdateafter', ['propertytested', 'allowequaldates'], function (options) {
- options.rules['isdateafter'] = options.params;
- options.messages['isdateafter'] = options.message;
- });
- $.validator.addMethod("isdateafter", function(value, element, params) {
- alert(params.propertytested);
- var startdatevalue = $('input[name="' + params.propertytested + '"]').val();
- if (!value || !startdatevalue) return true;
- return (params.allowequaldates) ? Date.parse(startdatevalue) <= Date.parse(value) : Date.parse(startdatevalue) < Date.parse(value);
- }, '');
- public class TrainingDateEditViewModel
- {
- #region Properties
- /// <summary>
- /// Gets or sets CalendarEntry.
- /// </summary>
- public CalendarEntry CalendarEntry { get; set; }
- ....
- <input type="text" value="" name="CalendarEntry.EndDate" id="CalendarEntry_EndDate" data-val-isdateafter-propertytested="StartDate" data-val-isdateafter-allowequaldates="True" data-val-isdateafter="End date needs to be after start date" data-val="true">
- data-val-isdateafter-propertytested="StartDate" and IT SHOULD BE: "CalendarEntry.StartDate".
- $.validator.addMethod("isdateafter", function(value, element, params) {
- var parts = element.name.split(".");
- var prefix = "";
- if (parts.length > 1)
- prefix = parts[0] + ".";
- var startdatevalue = $('input[name="' + prefix + params.propertytested + '"]').val();
- if (!value || !startdatevalue)
- return true;
- return (params.allowequaldates) ? Date.parse(startdatevalue) <= Date.parse(value) :
- Date.parse(startdatevalue) < Date.parse(value);
- });
Add Comment
Please, Sign In to add comment