5

मैं jquery.ui के datepicker का उपयोग नहीं किया है क्योंकि मैं एक पूरे सप्ताह और अलग अलग परिस्थितियों में कई तिथियों का चयन करने की जरूरत है, तो मैं एक में Keith Wood's datepicker उपयोग कर रहा हूँ EditorTemplate मेरी दिनांक क्षेत्रों के लिए:विनीत मान्यकरण, गैर इनलाइन के लिए ठीक काम करता है Datepicker

@model Nullable<DateTime> 
    @{ 
     string name = ViewData.TemplateInfo.HtmlFieldPrefix; 
     string id = name.Replace(".", "_"); 
     string dt = Model.HasValue ? String.Format("{0:d}",(string)Model.Value.ToShortDateString()) : string.Empty; 
    }   
    @Html.TextBox("", dt, new { @class = "datefield", @type = "date", @id = id }) 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#@id').datepick({ 
       renderer: $.datepick.themeRollerRenderer, 
       multiSelect: 999 
      }); 
     });  
    </script> 

मान्यता ठीक है जब एक पाठ बॉक्स का उपयोग करने और datepicker "पॉप-अप" होने काम करता है; है एक स्निप-यह अपने कस्टम के क्लाइंट-साइड सत्यापन

@model Nullable<DateTime> 
    @{ 
     string name = ViewData.TemplateInfo.HtmlFieldPrefix; 
     string id = name.Replace(".", "_"); 
     string dt = Model.HasValue ? String.Format("{0:d}",(string)Model.Value.ToShortDateString()) : string.Empty; 
    } 

    <div class="kwdp"> 
    </div> 
    @Html.Hidden("", dt, new { @class = "datefield", @id = id }) 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('.kwdp').datepick({ 
       renderer: $.datepick.themeRollerRenderer, 
       multiSelect: 999 
      }); 
     });  
    </script> 

यहाँ:

form.validate({ 
     rules:{ 
      StartDate: { 
       required: true, 
       dpDate: true 
      } 
     }, 
     messages: { 
      StartDate: 'Please enter a valid date (dd-mm-yyyy)' 
     } 
    }); 
लेकिन क्या मैं वास्तव में चाहते हैं एक इनलाइन datepicker उपयोग करने के लिए है, लेकिन मैं मान्यता इन परिस्थितियों में काम करने के लिए नहीं मिल सकता है

और यहाँ मेरी डाटा कक्षा में datetime क्षेत्र की परिभाषा है:

[Required] 
    [DataType(DataType.Date)] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")] 
    public Nullable<DateTime> StartDate { get; set; } 

मैं समझता हूँ कि मैं datepicker तिथि (यों) के साथ छिपी हुई फ़ील्ड को पॉप्युलेट करने के लिए एक onSelect जोड़नी होगी, भले ही , छुपा फ़ील्ड मान खाली होने पर मुझे एक त्रुटि मिलनी चाहिए, लेकिन यह मान्य नहीं है। html मार्कअप निम्नलिखित के रूप में प्रदान की गई है:

<input name="StartDate" class="datefield" id="StartDate" type="hidden" data-val-required="The StartDate field is required." data-val="true" data-val-date="The field StartDate must be a date." value=""/> 

मैं निम्नलिखित पुस्तकालयों का उपयोग कर रहा:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>  
    <script src="@Url.Content("~/Scripts/datepick/jquery.datepick.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/datepick/jquery.datepick.ext.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/datepick/jquery.datepick.validation.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.ui.datepicker.validation.min.js")" type="text/javascript"></script> 

मैं a similar un-answered question लग रहा है कि डेवलपर एक ही समस्या हो रही है, लेकिन कोई पोस्ट समाधान मिल गया। कोई विचार जहां मैं गलत जा रहा हूं?

उत्तर

7

जेसन सही है। डिफ़ॉल्ट रूप से, jquery सत्यापन स्किप/अनदेखा इनपुट तत्वों को अनदेखा करता है। यह input type="hidden" तत्वों के लिए जाता है, या यहां तक ​​कि टेक्स्ट बॉक्स जो display:none; सीएसएस है/वारिस करते हैं। वहाँ एक सेटिंग ignore कहा जाता है, और उसके डिफ़ॉल्ट मान इस तरह दिखता है:

$.validator.setDefaults({ 
    ignore: '' 
}); 

यह jQuery मान्य सत्यापन अनदेखी करने के लिए नहीं कहता है:

ignore: ':hidden' 

आप निम्न स्क्रिप्ट के साथ अपने पृष्ठ पर इस सेटिंग को ओवरराइड कर सकते हैं गैर-दृश्य तत्वों के लिए। यदि आप इस स्क्रिप्ट का उपयोग करते हैं, तो jquery सत्यापन स्वचालित रूप से होना चाहिए, जब भी आप डेटपिकर फ़ील्ड मान को बदलते हैं, तो मैन्युअल रूप से सत्यापित करने के बिना क्षेत्र को अविश्वसनीय रूप से सत्यापित करें।

+0

उसने ऐसा किया!यह एचटीएमएल दोनों के लिए काम करता है। (...) और एचटीएमएल। टेक्स्टबॉक्स (... शैली = "प्रदर्शन: कोई नहीं")। नोट: मुझे पेज लाइफसाइक्ल में इसे लोड करना पड़ा था, मैं केवल एक फ़ंक्शन में डिफॉल्ट() सेट नहीं कर सकता था, जिसे गतिशील रूप से तत्वों के साथ फ़ॉर्म को पॉप्युलेट करते समय कहा जाता था। सहायता के लिए धन्यवाद। आर/ब्रैंडन – m4chine

+0

हां आप सही हैं, डिफ़ॉल्ट सेटिंग ओवरराइड प्रभावी नहीं लगती है अगर आप इसे स्वयं-निष्पादित अज्ञात फ़ंक्शन में डालते हैं। – danludwig

0

एमवीसी 3 छिपे हुए फॉर्म फ़ील्ड में क्लाइंटसाइड सत्यापन स्क्रिप्ट द्वारा मान्य नहीं किया गया है, जो मैं समझता हूं। क्यों न केवल टेक्स्ट फ़ील्ड छुपाएं, अगर आप ऐसा करना चाहते हैं?

@Html.TextBox("", dt, new { @class = "datefield", @type = "date", @id = id, style="display:none;" }) 

या आप एक @ Html.Hidden क्षेत्र आप मैन्युअल रूप से फार्म पर हर बार datepicker बदल गया है सत्यापित करें प्लगइन कॉल करने के लिए होगा के रूप में रखना चाहते हैं।

$("form").validate().form(); 
+0

ऐसा लगता है कि न केवल टाइप किया गया है जब वे टाइप = "छुपा" लेकिन जब प्रदर्शित होते हैं: कोई भी साथ ही इसका मूल्यांकन नहीं किया गया था। – m4chine

+0

मैंने एमवीसी 4 में माइग्रेट करने से पहले एमवीसी 3 में शुरुआत में इसका परीक्षण किया था, उम्मीद है कि यह इस मुद्दे को हल करेगा, लेकिन यह शीर्षक नहीं था। लेकिन आपके द्वारा पोस्ट किया गया फिक्स मैंने केवल एमवीसी 4 में परीक्षण किया है, मैंने कहीं और देखा है कि डिस्प्ले: किसी को इसे mvc3 में ठीक नहीं करना चाहिए था, मैं आपके फिक्स का परीक्षण करने के लिए mvc3 पर माइग्रेट करने का प्रयास करूंगा। – m4chine