में प्रमाणीकरण मैंने एमवीसी 3 समाधान को एमवीसी 4 में अपग्रेड किया। प्रवासन के बाद, वैधकर्ता टूट गया है।अविभाज्य दिनांक समय? एमवीसी 4
मेरी इनपुट तिथि, यदि मैं जर्मन भाषा के रूप में चुनता हूं, तो "20.03.2013" है। मुझे एमवीसी 4 में एक सत्यापन त्रुटि मिलती है, लेकिन एमवीसी 3 में नहीं। यदि मैं प्रारूप को "20.03.2013" से "20/03/2013" में बदलता हूं तो यह एमवीसी 4 में काम करता है, लेकिन एमवीसी 3 में नहीं ;-)
मैंने वर्तमान धागे की यूआई संस्कृति को जर्मन में सेट किया है। ResX मानों का आउटपुट सही भाषा में है, इसलिए मुझे पता है कि संस्कृति के साथ कोई त्रुटि नहीं होनी चाहिए।, केवल साइट के लिए ही। त्रुटि संदेश अंग्रेजी में हैं, लेकिन साइट जर्मन में है।
मुझे लगता है कि इसका मतलब है कि वैधकर्ता गलत यूआई संस्कृति का उपयोग करता है।
यहां कोड का उपयोग किया गया है।
[Required(ErrorMessageResourceName = "Error_DepartureDate", ErrorMessageResourceType = typeof(Resx.Query))] public DateTime? DepartureDate { get; set; }
मुझे लगता है कि वहाँ कुछ डिफ़ॉल्ट मॉडल बांधने की मशीन के साथ गलत है, गाया एचटीएमएल के रूप में अच्छा लग रहा है:
data-lang="de" data-mindate="3" data-val="true" data-val-required="Bitte geben Sie das gewünschte Reisedatum des Hinflugs ein." id="DepartureDate" name="DepartureDate" tabindex="3" type="text" value=""
मुझे लगता है कि जहाज के सूत्रों के Jscript उन्नत बनाया है जब आप का उपयोग कर एक नया MVC अनुप्रयोग बनाने विजुअल स्टूडियो 2012 (एसपी 1 स्थापित है) टेम्पलेट्स। इसका कोई प्रभाव नहीं पड़ा।
मेरे पास एक संस्कृतिमोडेल बाइंडर है जो वर्तमान संस्कृति को सत्र से बाहर पढ़ता है और एक छोटे से सहायक समारोह का उपयोग करके संस्कृति को सेट करता है।
public static void UpdateThreadCulture(CultureInfo culture) { Thread.CurrentThread.CurrentUICulture = culture; }
संस्कृति मॉडल बांधने वाला डिफॉल्ट बाइंडर है।
ModelBinders.Binders.DefaultBinder = new CultureModelBinder(); ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeModelBinder()); // and many, many more
शायद एमवीसी 4 के साथ निष्पादन आदेश में कुछ बदल गया है जिसके परिणामस्वरूप समस्या है?
अद्यतन: प्रोजेक्ट .NET Framework 4.5 को लक्ष्य के रूप में उपयोग करता है।
अद्यतन 2:
मैं एक कॉम्बो बॉक्स जहां उपयोगकर्ता 16 अलग-अलग भाषाओं का चयन कर सकते हैं, तो प्रत्येक का अपना विशिष्ट स्वरूपण है हो सकता है।
उदा। डीई-डी -> डीडी.एमएम.YYYY; एन-एन -> डीडी/एमएम/वाई वाई वाई; en-us -> एमएम/डीडी/वाईवायवाई
मुझे वर्तमान संस्कृति को स्थापित करने के बारे में एक संकेत मिला है, यहां यह सबूत है कि यह सही होना चाहिए। वैध कोड विफल होने पर यह कोड हिट नहीं होता है, ऐसा लगता है कि यह क्लाइंट पक्ष पर होता है।
public class DateTimeModelBinder : IModelBinder { private LogService _log = new LogService(); public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { object result = null; ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (valueResult != null) { try { var stateHandler = new StateHandler(controllerContext.HttpContext.Session); result = valueResult.ConvertTo(typeof(DateTime?), stateHandler.Culture); } catch { try { result = valueResult.ConvertTo(typeof(DateTime?), CultureInfo.InvariantCulture); } catch (Exception ex) { _log.Error("DateTimeModelBinder parse exception", ex); _log.KeyValue("AttemptedValue", valueResult.AttemptedValue); } } } return result; } }
और संपूर्णता मेरी संस्कृति मॉडल बांधने की मशीन के लिए:
public class CultureModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { StateHandler stateHandler = new StateHandler(controllerContext.HttpContext.Session); Helper.UpdateThreadCulture(stateHandler.Culture); return base.BindModel(controllerContext, bindingContext); } }
अपडेट:: पढ़ें निम्न आलेख: http://weblogs.asp.net/scottgu/archive/2010/06/10/jquery-globalization-plugin-from-microsoft.aspx
हो सकता है कि इस समस्या का एक संबंध हैने निम्न प्रयास किया:
निम्न क्रम में स्क्रिप्ट लोड किया गया:
/Scripts/jquery-1.8.3.min.js /Scripts/globalize.js /Scripts/cultures/globalize.cultures.js // and much more other scripts...
कॉल गयी। आउटपुट सही ढंग से "डीई" था।
var currentLanguage = $("#DepartureDate").attr("data-lang"); alert(currentLanguage); $.preferCulture(currentLanguage);
नहीं प्रमाणकों के लिए प्रभावित कर ...
मेरे अपने प्रश्न के संभावित डुप्लिकेट: पी http://stackoverflow.com/questions/11756226/dot-separated-clientside-date-validation-in-asp-mvc-4/11771781#11771781 –
Thx, मैंने आपका प्रश्न देखा। मैं बंडल का उपयोग नहीं करता। यह एमवीसी 3 से एमवीसी 4 तक 1: 1 अपग्रेड था। मैंने टेम्पलेट से एक नई एमवीसी 4 परियोजना बनाने की भी कोशिश की और एक ही समस्या है। मैंने तब बंडल हटा दिया और इसका कोई प्रभाव नहीं पड़ा। – NickD
क्या आपने प्रश्न में देखा गया डिफ़ॉल्ट jquery date validator को ओवरराइड किया है? –