Größer als oder gleich heute Datumsüberprüfung in MVC3

Hat jemand eine MVC3-Datenanmerkung für die Datumsüberprüfung gesehen, bei der ein einzelnes ausgewähltes Datum gleich oder größer als das aktuelle Datum sein muss?

Wenn es bereits ein Add-On von Drittanbietern gibt, ist das auch cool. Ich verwende bereits die DataAnnotationsExtensions, aber sie bieten nicht das, wonach ich suche.

Es scheint keinen Hinweis darauf zu geben. Ich hoffe also, jemand hat dies bereits gelöst, bevor ich versuche, das Rad neu zu erfinden und meinen eigenen benutzerdefinierten Validator zu schreiben.

ich habe es versuchtRange Das erfordert aber 2 Datumsangaben und beide müssen Konstanten im Zeichenkettenformat sein, wie z[Range(typeof(DateTime), "1/1/2011", "1/1/2016")] aber das hilft nicht. Und die DataAnnotationsExtensionsMin validator akzeptiert nurint unddouble

Aktualisieren Gelöst

Dank @BuildStarted habe ich dieses Ergebnis erzielt und es funktioniert sowohl serverseitig als auch clientseitig mit meinem Skript

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 be 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";
        }
    }
}

Und in meinem Modell

[Required]
[DateMustBeEqualOrGreaterThanCurrentDate]
public DateTime SomeDate { get; set; }

Das clientseitige Skript

/// <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 from 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");

Antworten auf die Frage(3)

Ihre Antwort auf die Frage