2011-06-02 7 views
7

में काम नहीं करता है मैं डेटा एन्नोटेशन, jQuery.validate और jquery.validate.unobtrusive का उपयोग कर एक दिन सीमा सत्यापनकर्ता बना रहा हूं। http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.htmljQuery.validator.unobtrusive.adapters.addMinMax राउंड ट्रिप, एमवीसी 3

http://weblogs.asp.net/mikaelsoderstrom/archive/2010/10/06/unobtrusive-validation-in-asp-net-mvc-3.aspx

और अन्य लेकिन उन्हें (noob)

साथ ही पोस्ट के अधिकांश के रूप में इतने पर पोस्ट नहीं कर सकते: मैं पहले से ही निम्नलिखित पढ़ा है। मैं एक दीवार के खिलाफ मेरे सिर baning रहा हूँ, किसी भी मदद बियर/खाद्य/कोड/आदि के साथ rewardde किया जा सकता है;) वैसे भी यहाँ कोड है:

मैं निम्नलिखित पैरामीटर के साथ एक मॉडल वस्तु है:

[Display(Name = "Start date"), 
DayRange(0, 5, ErrorMessage = "The Start Date must be between today and 5 days time.")] 
public DateTime StartDate { get; set; } 

DayRange कस्टम विशेषता वर्ग है:

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] 
public class DayRangeAttribute : RangeAttribute, IClientValidatable 
{ 
    private int _minimumDays; 
    private int _maximumDays; 

    public DayRangeAttribute(int minimumDays, int maximumDays) : base(minimumDays, maximumDays) 
    { 
     _minimumDays = minimumDays; 
     _maximumDays = maximumDays; 
    } 

    public override bool IsValid(object value) 
    { 
     var dateToBeTested = value as DateTime?; 
     return dateToBeTested.HasValue && dateToBeTested.Value >= DateTime.Today.AddDays(_minimumDays) && dateToBeTested.Value <= DateTime.Today.AddDays(_maximumDays); 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     var rule = new ModelClientValidationRule 
         { 
          ErrorMessage = this.ErrorMessage, 
          ValidationType = "dayrange" 
         }; 
     rule.ValidationParameters.Add("min", _minimumDays); 
     rule.ValidationParameters.Add("max", _maximumDays); 
     yield return rule; 
    } 
} 

मैं अपने web.config में निम्नलिखित है:

<appSettings> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings> 
jQuery.validator.addMethod('dayrange', function (value, element, param) { 
    if (!value) return false; 
    var now = Date(); 
    var dateValue = Date.parse(value); 
    var minDate = now.setDate(now.getDate() - param.min); 
    var maxDate = now.setDate(now.getDate() + param.max); 

    return this.optional(element) && dateValue >= minDate && dateValue <= maxDate; 
}, 'Must fall in range'); 

jQuery.validator.unobtrusive.adapters.addMinMax('dayrange', 'minlength', 'maxlength', 'dayrange'); 

क्या मैं गलत कर रहा हूँ:मैंने पहले दस्तावेज़ तैयार है निम्नलिखित जे एस ट्रिगर किया है (यह ट्रिगर जब दस्तावेज़ भी तैयार है की कोशिश की है)? अग्रिम धन्यवाद, जोल

उत्तर

19

हल हो गया! मैं भूल गया/समझ में नहीं आया कि आपको स्वयं को फ़ंक्शन बंद करने में jQuery को पास करना होगा। इसलिए ग्राहक के पक्ष कस्टम सत्यापनकर्ता इस तरह दिखना चाहिए:

$(function() { 
    jQuery.validator.addMethod('dayRange', function (value, element, param) { 
     if (!value) return false; 
     var valueDateParts = value.split(param.seperator); 
     var minDate = new Date(); 
     var maxDate = new Date(); 
     var now = new Date(); 
     var dateValue = new Date(valueDateParts[2], 
          (valueDateParts[1] - 1), 
          valueDateParts[0], 
          now.getHours(), 
          now.getMinutes(), 
          (now.getSeconds()+5)); 

     minDate.setDate(minDate.getDate() - parseInt(param.min)); 
     maxDate.setDate(maxDate.getDate() + parseInt(param.max)); 

    return dateValue >= minDate && dateValue <= maxDate; 
}); 

    jQuery.validator.unobtrusive.adapters.add('dayrange', ['min', 'max', 'dateseperator'], function (options) { 
     var params = { 
      min: options.params.min, 
      max: options.params.max, 
      seperator: options.params.dateseperator 
     }; 

     options.rules['dayRange'] = params; 
     if (options.message) { 
      options.messages['dayRange'] = options.message; 
     } 
    }); 
}(jQuery)); 

मैं भी तरह से मैं विनीत को एडाप्टर जोड़ने बदल तो मैं अतिरिक्त गुण जोड़ सकते हैं। फ्रंट-एंड इंजीनियरों की नौकरी करने के लिए सर्वर-साइड देव को कभी भी भेजें;) उम्मीद है कि इससे किसी की मदद मिलती है।

+1

ने मेरी मदद की! धन्यवाद :-) – Peter

+0

आनंद साथी। मुझे यह जानने के लिए घंटों लगे कि '(jQuery)' अंत में गायब था, आशा है कि आप उतना समय नहीं ले पाएंगे। – jolySoft

+0

मैं jquery सत्यापन का उपयोग कर कस्टम सत्यापन फ़ंक्शन बनाने का तरीका ढूंढ रहा था जिसके लिए आप पैरामीटर पास कर सकते हैं। और आपने मुझे एक अच्छा उदाहरण दिया है! – Peter

2

संदर्भ: तो आप की जरूरत

jQuery.validator.unobtrusive.adapters.addMinMax('dayrange', '', '', 'dayrange','minlength', 'maxlength'); 

AND,,, 

param.min, param.max be sure to undefine. param is an purely array as: ['111','000']. 

:

adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute 

तो आप इस की जरूरत है: http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

adapters.addMinMax() के परम इस orderby है

var minDate = now.setDate(now.getDate() - param[0]); 
var maxDate = now.setDate(now.getDate() + param[1]); 
संबंधित मुद्दे