किसी को भी एक भी चुनी गई तिथि के बराबर या आज की तारीख से अधिक होना आवश्यक है कि दिनांक सत्यापन के लिए एक MVC3 डेटा एनोटेशन देखा है?से अधिक या MVC3
यदि पहले से ही कोई तीसरी पार्टी उस ठंड पर भी जोड़ती है। मैं पहले ही DataAnnotationsExtensions का उपयोग कर रहा हूं लेकिन यह वह ऑफर नहीं करता है जिसे मैं ढूंढ रहा हूं।
इस पर कोई संदर्भ नहीं प्रतीत होता है। इसलिए, उम्मीद है कि पहिया को फिर से शुरू करने और अपना खुद का कस्टम सत्यापनकर्ता लिखने से पहले किसी ने इसे हल कर लिया है।
मैंने Range
की कोशिश की है लेकिन इसके लिए 2 तिथियों की आवश्यकता है और दोनों को [Range(typeof(DateTime), "1/1/2011", "1/1/2016")]
जैसे स्ट्रिंग प्रारूप में स्थिरांक होना चाहिए, लेकिन इससे मदद नहीं मिलती है। और DataAnnotationsExtensions Min
सत्यापनकर्ता केवल int
और double
अद्यतन स्वीकार करता हल
धन्यवाद @BuildStarted को यह क्या मैं के साथ समाप्त हो गया है और यह मेरी स्क्रिप्ट के साथ महान सर्वर साइड और अब ग्राहक के पक्ष में काम करता है
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";
}
}
}
और मेरे मोड में एल
[Required]
[DateMustBeEqualOrGreaterThanCurrentDate]
public DateTime SomeDate { get; set; }
क्लाइंट साइड स्क्रिप्ट
/// <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");
सर्वर DateTime.Today और क्लाइंट साइड datetime में नीचे पंक्ति जोड़ें। मुझे लगता है कि आपको जावास्क्रिप्ट नई तिथि() का उपयोग करने के बजाय सर्वर साइड टाइम पास करना चाहिए। –
एक और मुद्दा यह है कि आप मानते हैं कि ग्राहक की अमेरिकी तिथि सेटिंग्स (मिमी/डीडी/yyyy) (आज = महीना + '/' + दिन + '/' + वर्ष + '' + घंटे + '।' + मिनट + ' । + सेकंड;) यह अन्य लोकेशंस में काम नहीं करेगा। –
अच्छी कॉल, लेकिन हम यूएस –