जहाँ तक मुझे पता है, आपके मानदंडों से मेल खाने का कोई तरीका नहीं है। आप को उन चीज़ों में से एक करना होगा जो आप जानते हैं कि आप कर सकते हैं (मैं कहूंगा कि सबसे उचित तरीका कस्टम मूल्य प्रदाता होगा)।
कारण: सभी डिफ़ॉल्ट ValueProviders CultureInfo.InvariantCulture
या CultureInfo.CurrentCulture
का उपयोग करने के लिए हार्डकोड किए गए हैं।
यहाँ, विशेष रूप से, जिस तरह से FormValueProvider
यह करता है:
internal FormValueProvider(
ControllerContext controllerContext,
IUnvalidatedRequestValues unvalidatedValues
)
: base(
controllerContext.HttpContext.Request.Form,
unvalidatedValues.Form,
CultureInfo.CurrentCulture // <--- Grrr, argh
)
{
}
संस्कृति कहीं और (से प्राप्त नहीं होता यानी, तर्क के ऊपर एक डिफ़ॉल्ट के रूप में इस्तेमाल नहीं किया है, लेकिन एक संस्कृति के रूप में उपयोग करने के लिए)।
अलग IValueProviders
संदर्भ के लिए की संस्कृति, तब ये डिफ़ॉल्ट IValueProviders से प्रत्येक के लिए संस्कृतियों हैं:
- ChildActionValueProvider: InvariantCulture
- FormValueProvider: CurrentCulture
- JsonValueProvider : वर्तमान संस्कृति
- RouteDataValueProvider: InvariantCulture
- QueryStringValueProvider: InvariantCulture
- HttpFileCollectionValueProvider: InvariantCulture
की जगह CurrentCulture
IValueProviders
यह एक बड़ी कार्य FormValueProvider
को बदलने के लिए, क्योंकि के रूप में देखा नहीं है ऊपर, यह सिर्फ अपनी बेस क्लास '(NameValueCollectionValueProvider
) कन्स्ट्रक्टर कहता है - जो वांछित संस्कृति लेता है एक तर्क के रूप में।
फॉर्मवैल्यूप्रोवाइडर का मूल कार्यान्वयन सतह पर दिखाई देता है जो आंतरिक वर्गों और इंटरफेस के संदर्भ में वास्तव में कठिन होता है। लेकिन प्रदाता को प्रतिस्थापित करने के लिए उनकी आवश्यकता नहीं है - वे केवल यूनिट परीक्षण के लिए हैं। Request.Forms
और Validation.Unvalidated(Request)
की Forms
संपत्ति (एक स्थिर विधि):
आप केवल दो NameValueCollection
कि आसानी से प्राप्त कर रहे हैं गुजर, (जैसा कि ऊपर उल्लेख) आधार निर्माता कॉल करने के लिए की जरूरत है। और अपनी इच्छित संस्कृति के लिए तीसरा तर्क निर्धारित करें।
FormValueProviderFactory
और भी सरल है।
JsonValueProvider
थोड़ा और अधिक शामिल है - क्योंकि हालांकि यह अधिभावी GetValueProvider()
अनुमति देता है, उस विधि में मुख्य रूप से अन्य private static
तरीकों के लिए कॉल के होते हैं - मूल रूप से आप एक नया वर्ग के लिए JsonValueProviderFactory
के स्रोत को कॉपी करें और संशोधित करने के लिए होगा।
संपादित करें (पेटार इवानोव): यह मेरे लिए काम करता है। इसे काम करने के लिए कस्टम फैक्टरी को ValueProviderFactories.Factories
पर जोड़ने के लिए पर्याप्त नहीं था, क्योंकि इस तरह इसे FormValueProviderFactory
के बाद जोड़ा गया है। इसके बजाय, मुझे कस्टम के साथ FormValueProviderFactory
को प्रतिस्थापित करना पड़ा।
उत्तर के लिए धन्यवाद। मुझे लगता है कि मुझे यकीन नहीं था कि कौन से डिफ़ॉल्ट प्रदाता वर्तमान संस्कृति का उपयोग करते हैं (और इसलिए मुझे विस्तार करने की आवश्यकता है), इसलिए मैं एक और सामान्य समाधान की तलाश में था। –
सूची जोड़ा गया। मैंने 'सत्र' और 'टेम्पडडाटा' हटा दिया - वे एमवीसी फ्यूचर्स का हिस्सा हैं और इसलिए डिफ़ॉल्ट रूप से इसका उपयोग नहीं किया जाता है - वही 'कुकी' और 'सर्वर वैरिएबल' के लिए जाता है। वे सभी 'InvariantCulture' का उपयोग करते हैं। – JimmiTh