वर्तमान में, मेरे पास GlobalizationFilter
नामक एक वैश्विक फ़िल्टर है जो अनुरोध के लिए सही संस्कृति सेटिंग्स निर्धारित करने के लिए मार्ग मान, कुकीज़ और ब्राउज़र भाषा शीर्षलेख की जांच करता है:एमवीसी 3 वैश्वीकरण: मॉडल बाध्यकारी से पहले वैश्विक फ़िल्टर की आवश्यकता है
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// determine cultureInfo
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
}
यह सब काम करता है, लेकिन मॉडल बाध्यकारी प्रक्रिया प्रतीत होती है वैश्विक फ़िल्टर से पहले, और इसलिए मॉडल बाइंडर संस्कृति सेटिंग्स को ध्यान में नहीं लेता है।
इससे डबल मानों, DateTime
मान आदि को समझने में समस्याएं आती हैं
मैं संस्कृति पहचान कोड को अन्य स्थानों पर ले जा सकता हूं, लेकिन मुझे अपने किसी भी विकल्प को पसंद नहीं है:
आवेदन की
BeginRequest
घटना। इस समय रूटिंग नहीं हुई है, इसलिए मुझे URL से/en-US/
संस्कृति टोकन मैन्युअल रूप से बाहर करना होगा। यह अस्वीकार्य में है।नियंत्रक की
Initialize()
विधि। यह मुझे मेरे सभी नियंत्रकों के लिए बेस क्लास लिखने के लिए मजबूर करेगा, और इससे मौजूदा नियंत्रकों का वारिस होगा। मुझे यह पसंद नहीं है, लेकिन अगर मैं कुछ भी बेहतर नहीं होता तो मैं इस समाधान का चयन करूंगा।
आदर्श रूप में, मैं "रूटिंग पूर्ण" और "मॉडल बाध्यकारी शुरूआत" घटनाओं के बीच अपना कोड इंजेक्ट करने का कोई तरीका ढूंढना चाहता हूं, लेकिन मुझे इस पर एमएसडीएन/Google में कुछ भी नहीं मिला।
या शायद एमवीसी 3 वैश्वीकरण को संभालने का कोई और तरीका है जिसे मैं अनजान हूं?
किसी भी योगदान के लिए अग्रिम धन्यवाद।
के बाद से मैं पाने के लिए जा रहा हूँ से पहले
DefaultModelBinder
संस्कृति स्थापित करने के लिए वर्ग का उपयोग करता है से निकला बनाने वैसे भी एक कस्टम मॉडल बांधने की मशीन, यह सबसे अच्छा तरीका लगता है। धन्यवाद – Zrutyहालांकि, मॉडल बाइंडर में अनुरोध-व्यापी संस्कृति को सेट करना थोड़ा सा अंतर्ज्ञानी लगता है .. – Zruty
आप संस्कृति को हाथ से पहले स्टोर कर सकते हैं, संस्कृति सेट कर सकते हैं और मॉडल को बांध सकते हैं और फिर मूल संस्कृति को पुनर्स्थापित कर सकते हैं। एक कस्टम मॉडल बाइंडर एमवीसी आर्किटेक्चर में बस एक सीम है, यदि आप एकल जिम्मेदारी सिद्धांत तर्कों से असहज हैं तो आप इसे अन्य स्थानों पर कार्यान्वित कर सकते हैं। उदाहरण के लिए, आप अपना खुद का मार्ग हैंडलर परिभाषित कर सकते हैं जो संस्कृति को सेट करता है। आपके ड्राइविंग सिद्धांतों पर निर्भर करता है। यदि टेस्टेबिलिटी महत्वपूर्ण है, तो इसे कहीं भी न डालें जो परीक्षण करने में मुश्किल होगी (जैसे 'Application_BeginRequest') :) –