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