2013-10-09 12 views
5

मेरे पास दो दिनांक फ़ील्ड, आरंभ तिथि और समाप्ति तिथि के साथ एक फॉर्म है। मैं यह सुनिश्चित करने के लिए दो फ़ील्ड को सत्यापित करना चाहता हूं कि आरंभ तिथि समाप्ति तिथि पर या उससे पहले हो। मैंने एक दूरस्थ सत्यापनकर्ता लिखा है और इसे दोनों फ़ील्ड में असाइन किया है, लेकिन इससे एक ही त्रुटि के लिए कई संदेश हो सकते हैं। साथ ही, यदि मैं एक तारीख को सही करता हूं तो पुरानी त्रुटि संदेश को छोड़कर अनमोडिफाइड फ़ील्ड पर सत्यापन नहीं होता हैएएसपी.नेट एमवीसी अविभाज्य तिथि सीमा प्रमाणीकरण

आरंभ दिनांक पहले या अंतिम तिथि को सत्यापित करने के लिए मैं एक दूसरे के खिलाफ दो दिनांक फ़ील्ड को कैसे सत्यापित कर सकता हूं?

उत्तर

2

मुझे कुछ हफ्ते पहले भी यही समस्या थी। आईएमएचओ मुझे लगता है कि समस्या को हल करने का सबसे अच्छा तरीका jquery का उपयोग कर क्लाइंट-साइड कंट्रोल को कार्यान्वित करना है। इस तरह आप स्टार्टडेट या एंडडेट पर मूल्य बदलने पर हर बार सत्यापन को कॉल कर सकते हैं। इस मामले में क्लाइंट पर आपके डेटा को सत्यापित करने के लिए सर्वर को कॉल करना बेहतर है क्योंकि आप सर्वर को कॉल नहीं करते हैं।

निम्न लिंक में क्लाइंट-साइड सत्यापन लागू करने की प्रक्रिया है।

चरण 1:: Link

यह मेरा समाधान है विशेषता कक्षा बनाएं

public class ConsecutiveDateAttribute : ValidationAttribute, IClientValidatable 
{ 
    public ConsecutiveDateAttribute() 
    { 
     ErrorMessage = "The date must be consecutive"; 
    } 

    public override bool IsValid(object value) 
    { 
     return true; 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     var rule = new ModelClientValidationRule(); 
     rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()); 
     rule.ValidationParameters.Add("datefield", metadata.PropertyName); 
     rule.ValidationType = "consecutivedate"; 
     yield return rule; 
    } 
} 

अगर है विधि वापसी हमेशा सच लगातार दिनांकों को मान्य करने क्योंकि मैं अपनी पसंदीदा क्लाइंट पर मूल्यों को मान्य करना चाहते हैं पक्ष। GetClientValidationRules फ़ंक्शन का उपयोग प्रत्येक फ़ील्ड के सत्यापन को कॉल करने के लिए जोड़े फ़ील्ड नाम और ईवेंट सत्यापन नाम cshtml पृष्ठ को पास करने के लिए किया जाता है।

चरण 2: विशेषता के साथ डेकोरेट क्षेत्रों है कि मैं मान्य करने के लिए

[Required(), DataType(DataType.Date), ConsecutiveDate()] 
    public DateTime StartDate { get; set; } 

    [Required(), DataType(DataType.Date), ConsecutiveDate()] 
    public DateTime EndDate { get; set; } 

चरण 3 चाहते ConsecutiveDate: पेज में तारीख

<script src="@Url.Content("~/Scripts/jquery-1.10.2.js")" type="text/javascript" /> 
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript" /> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 

<script type="text/javascript"> 

    if ($.validator && $.validator.unobtrusive) { 

     $.validator.unobtrusive.adapters.addSingleVal("consecutivedate", "datefield"); 

     $.validator.addMethod("consecutivedate", function(value, element) { 

      if ($("#StartDate").val() != "" && $("#EndDate").val() != "") 
       return $("#StartDate").val() <= $("#EndDate").val(); 

      // IF both values are not polupated I don't want to validate the field 
      return true; 
     }); 

    } 
</script> 

मान्य करने के लिए $ .validator जावास्क्रिप्ट को लागू करें। addMethod ("consecutivedate", फ़ंक्शन (मान, तत्व): यह प्रत्येक फ़ील्ड के लिए सत्यापन पंजीकृत करता है जिसे मैं मान्य करना चाहता हूं।

+0

यहां लिंक की सामग्री भी शामिल करें। – deW1

+0

मुझे खेद है कि मेरा पहला जवाब था। अगला और अधिक पूरा हो जाएगा। आपकी प्रतिक्रिया के लिए धन्यवाद। –

संबंधित मुद्दे