में बाध्यकारी एन-जीबी तिथियां मुझे तिथियों के साथ एक समय का दुःस्वप्न है। यूके में आधारित थे, इसलिए हमारी तिथि प्रारूप डीडी/एमएम/yyyy है। जब उपयोगकर्ता एक निश्चित तारीख चाहते हैं तो उपयोगकर्ता फॉर्म में टाइप करेंगे। मेरे पास एक ऐसा फॉर्म है जो ऐसी संपत्ति स्वीकार करता है। यह स्पष्ट रूप से डेटटाइम प्रकार है। मैं इस फॉर्म को जीईटी में नियंत्रक को भेजना चाहता हूं, इसलिए उपयोगकर्ता के पास एक अच्छा यूआरएल है जो वे पास को सहेज सकते हैं आदि। दृश्य को इस तत्व के लिए एक JQuery UI डेटपिकर को भी बांधना होगा। मैं भी ऐसा फ़ॉर्म तत्व की जरूरत है ताकि मैं वास्तव में इस प्रकार के फार्म को यह रेंडर करने के लिए की जरूरत है एक निश्चित आईडी और वर्ग के लिए:HTTP GET
<globalization uiCulture="en" culture="en-GB"/>
:
@Html.TextBoxFor(model => model.ReturnDate, new { Class = "date", id = "ReturnDate" })
मैं web.config में ब्रिटेन के एक संस्कृति संस्करण निर्दिष्ट किया है
हालांकि यह समझाया गया है, जैसा कि यहां बताया गया है (http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx) कि जब एक नियंत्रक एक्ट्यूशन प्राप्त करता है कि एमवीसी संस्कृति संस्करण को अनदेखा करता है और अमेरिका को डिफ़ॉल्ट करता है (जाहिर है कि अमेरिका के बाहर कोई भी मौजूद नहीं है तो यह माइक्रोसॉफ्ट के लिए ठीक है, रेंट ओवर) संलग्न मदद नहीं करता है क्योंकि इसका मतलब है कि मुझे इसे प्रत्येक मॉडल में प्रत्येक तारीख के लिए सेट करना होगा!
इसका मतलब है कि यदि कोई उपयोगकर्ता 01/05/2012 टाइप करता है तो मैं 05/01/2012 के साथ समाप्त होता हूं जो गलत है!
मैंने इस मुद्दे के विभिन्न समाधानों को देखा है लेकिन मुझे वास्तव में जो भी चाहिए वह वास्तव में फिट नहीं है। मुझे एक तरीका चाहिए ताकि जीईटी के माध्यम से भेजी गई सभी तिथियां यूके प्रारूप में हैं। हम पूरी तरह से ब्रिटेन में स्थित हैं, इसलिए कोई भी यूके प्रारूप दर्ज नहीं किया जाएगा।
मैं वास्तव में बनाना और संपादक बनाना नहीं चाहता हूं जब तक कि यह एक तरीका नहीं है कि मैं इस संपादक से जुड़े व्यू/व्यूमोडेल के बिना ऐसा कर सकता हूं क्योंकि यह हर जगह इसका उपयोग करने के लिए अनावश्यक रूप से आ जाएगा, हमारे पास डेट पिकर है।
सभी मदद की सराहना की जाएगी!
public class GBDateModelBinder : IModelBinder
{
#region IModelBinder Members
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string dateString = controllerContext.HttpContext.Request.QueryString[bindingContext.ModelName];
if (string.IsNullOrEmpty(dateString))
dateString = controllerContext.HttpContext.Request.Form[bindingContext.ModelName];
DateTime dt = new DateTime();
bool success = DateTime.TryParse(dateString, CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out dt);
if (success)
{
return dt;
}
else
{
return null;
}
}
#endregion
}
तो Global.asax में रजिस्टर:
ModelBinders.Binders.Add(typeof(DateTime), new GBDateModelBinder());
अद्यतन
इस बदल के लिए अनुमति देने के लिए
आपकी पोस्ट को हल करने के लिए आपने जिस पोस्ट को लिंक किया है, वह कैसा है? – Jon
जहाँ तक मैं देख सकता हूं मुझे प्रत्येक क्वेरीस्ट्रिंग पैरामीटर के लिए ऐसा करने की आवश्यकता होगी? (bindingContext.HttpContext.Request.QueryString ["thedate"];) यह व्यावहारिक नहीं है। – Liam
यदि आप कस्टम मॉडल बाइंडर को कार्यान्वित करते हैं, तो यह प्रभावित होगा कि पूरे ऐप में आपके ऐप में कितनी तारीखें आती हैं, क्वेरीस्ट्रिंग्स, फॉर्म डेटा, कुकीज़ इत्यादि – Jon