6

मुझे बहुत सारे सिमुलेयर प्रश्न मिले लेकिन काम करने के लिए एक अच्छा साफ समाधान नहीं है। मैं इसे काम करने के लिए बहुत सारे कस्टम कोड देखता हूं लेकिन वह क्यों है? क्या यह शुरुआत से काम नहीं कर रहा है?एमवीसी डेटटाइम सत्यापन विफल

मुझे लगता है कि अजीब बात यह है कि आईई 9 में यह काम करता है लेकिन फ़ायरफ़ॉक्स और क्रोम में यह असफल रहा है। हर बार जब मैं फ़ायरफ़ॉक्स या क्रोम में कोशिश कर रहा हूं, तो मुझे संदेश मिलता है "फ़ील्ड जन्मदिन एक तिथि होना चाहिए"।

जब मैं एक नई एमवीसी 4 आरटीएम परियोजना में नीचे दिए गए कोड को आजमाता हूं, तो मैं इसे काम नहीं कर सकता। मैं डेटटाइम देखता हूं.अब सभी ब्राउज़रों में डीडी-एमएम-वाईय (हॉलैंड) के रूप में डिफ़ॉल्ट है लेकिन मैं इसे फ़ायरफ़ॉक्स और क्रोम में सबमिट नहीं कर सकता।

वैश्वीकरण टैग web.config में सेट नहीं है, इसलिए यह डिफ़ॉल्ट का उपयोग करना चाहिए। हॉलैंड से मैं इसलिए मुझे लगता है कि क्लाइंट संस्कृति मिलनी चाहिए।

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)] 
    //[DataType(DataType.Date)] 
    public DateTime Birthday { get; set; } 
} 

[AllowAnonymous] 
    public ActionResult Register() 
    { 
     RegisterModel vm = new RegisterModel() 
     { 
      Birthday = DateTime.Now 
     }; 
     return View(vm); 
    } 

    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      try 
      { 
       //WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 
       //WebSecurity.Login(model.UserName, model.Password); 
       return RedirectToAction("Index", "Home"); 
      } 
      catch (MembershipCreateUserException e) 
      { 
       ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

मार्कअप

<!-- language: lang-none --> 
@model DateTimeWithDatePicker.Models.RegisterModel 
@{ 
    ViewBag.Title = "Register"; 
} 

<hgroup class="title"> 
    <h1>@ViewBag.Title.</h1> 
    <h2>Create a new account.</h2> 
</hgroup> 

@using (Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary() 

    <fieldset> 
     <legend>Registration Form</legend> 
     <ol> 
      <li> 
       @Html.LabelFor(m => m.UserName) 
       @Html.TextBoxFor(m => m.UserName) 
      </li> 
      <li> 
       @Html.LabelFor(m => m.Birthday) 
       @Html.EditorFor(m => m.Birthday) 
      </li> 
     </ol> 
     <input type="submit" value="Register" /> 
    </fieldset> 
} 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 
+0

क्षमा करें, लेकिन मैं कैसे ऊपर MVC देखें फ़ॉर्मेट करने के लिए पता नहीं है। –

उत्तर

3

समस्या थी jQuery मान्यता और स्थानीयकरण । ऐसा लगता है कि jQuery प्लगइन के संदेशों और विधियों के लिए स्थानीयकरण फाइलें हैं। समस्या का एक विस्तार explaination और मैं इसे कैसे हल के लिए मेरे ब्लॉग देखें।

http://www.locktar.nl/programming/mvc/localization-validation-in-mvc/

संपादित करें: मैं सिर्फ सभी स्थानीयकरण समस्याओं का एक ताज़ा और कैसे दिनांक समय संपत्ति के लिए इसे ठीक करने के साथ एक नया ब्लॉग पोस्ट का विमोचन किया। मेरी नई पोस्ट MVC localization validation देखें।

+0

मैंने http://ajax.aspnetcdn.com/ajax/jquery.validate/1.7/localization/methods_nl.js का उपयोग किया है, मैंने आपके लिंक का पालन किया है। यह आईई और फ़ायरफ़ॉक्स में ठीक काम करता है, लेकिन क्रोम में नहीं। क्रोम html5 डेट इनपुट का समर्थन करता है और "yyyy-mm-dd" प्रारूप में मान संग्रहीत करता है। मैंने परीक्षण को बदल दिया है: यदि (Modernizr.inputtypes.date) { सत्य वापस आना; } अन्य {<मूल परीक्षण>} –

+0

क्या आपने नवीनतम संस्करण में 1.7 बदल दिया है? यह कुछ समय पहले मैंने उस ब्लॉग को लिखा है। मैंने अभी अपनी नई ब्लॉग साइट www.locktar.nl पर लॉन्च की है। –

1

भूमंडलीकरण टैग तो यह डिफ़ॉल्ट का उपयोग किया जाना चाहिए web.config में सेट नहीं है। हॉलैंड से मैं इसलिए मुझे लगता है कि क्लाइंट संस्कृति मिलनी चाहिए।

नहीं, यह सही नहीं है। आप हॉलैंड से पूरी तरह से ठीक हो सकते हैं और चीनी संस्कृति का उपयोग करने के लिए अपने ब्राउज़र को कॉन्फ़िगर किया है। कारण यह आपको काम पर नहीं ला सकता है क्योंकि शायद एफएफ और क्रोम में आपके पास सही संस्कृति नहीं है।

आप web.config में अपने भूमंडलीकरण तत्व में एक संस्कृति निर्दिष्ट नहीं किया है के बाद से, ASP.NET MVC एक अनुरोध हेडर में ब्राउज़र से भेजा प्रयोग करेंगे।

Accept-Language:en-US,en;q=0.8 

यहाँ है कि यह कैसे क्रोम में कॉन्फ़िगर किया गया है:

enter image description here

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

और यहाँ दिखाया गया है जैसे कि आप मॉडल आप एक कस्टम मॉडल बांधने की मशीन लिख सकता है बंधन के दौरान अपने DisplayFormat विशेषता में परिभाषित एक के रूप में एक ही वाक्य विन्यास का उपयोग करने के लिए एक विश्वसनीय तरीका हैं: https://stackoverflow.com/a/7836093/29407

+0

मेरी संस्कृति फ़ायरफ़ॉक्स और क्रोम में अच्छी थी ताकि समस्या नहीं थी। समस्या jQuery सत्यापन था जो फ़ायरफ़ॉक्स और क्रोम में इंटरनेट एक्सप्लोरर के समान काम नहीं कर रहा था। इस पोस्ट का जवाब देखें और मेरा ब्लॉग विवरण में जाता है। –

7

मैं दिनांकों jQuery सत्यापनकर्ता समारोह को संशोधित करके इसे ठीक करने में सक्षम था:

<script type="text/javascript"> 

    $(function() { 

    var dateFormat="dd/mm/yy"; // en-gb date format, substitute your own 

    $("#Birthday").datepicker({ 
     "dateFormat": dateFormat 
    }); 

    jQuery.validator.addMethod(
     'date', 
     function (value, element, params) { 
      if (this.optional(element)) { 
       return true; 
      }; 
      var result = false; 
      try { 
       $.datepicker.parseDate(dateFormat, value); 
       result = true; 
      } catch (err) { 
       result = false; 
      } 
      return result; 
     }, 
     '' 
    ); 

}); 

+0

मेरे अपने विषय पर मेरी प्रतिक्रिया देखें। मैंने इसके बारे में ब्लॉगपोस्ट बनाया है http://stackoverflow.com/a/12346915/801005 –

+1

मैंने इस समस्या को हल करने का प्रयास करते समय आपके ब्लॉग पोस्ट की कोशिश की। मुझे यकीन है कि जब आप विभिन्न देशों के कई उपयोगकर्ताओं के लिए एक निर्णायक समाधान चाहते हैं तो यह सबसे अच्छा समाधान है। लेकिन ऊपर दी गई स्क्रिप्ट उपयुक्त है जब आपको दो मिनट के समाधान की आवश्यकता होती है और आप बहु देश उपयोगकर्ता आधार के लिए स्थानीयकरण की परवाह नहीं करते हैं। – gls123

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