2010-02-24 10 views
5

मैं एक HttpModule बना रहा हूं जिसे एक एमवीसी अनुप्रयोग में सेट के रूप में Thread.CurrentThread.CurrentCulture के मान को जानने की आवश्यकता है। वह मान वर्तमान में बेसकंट्रोलर द्वारा सेट किया जा रहा है, लेकिन जब मेरा HttpModule.PostRequestHandlerExecute() विधि आग लगती है, तो यह पृष्ठ प्रतिपादन से पहले संस्कृति के प्रति बदल जाती है। एक पेज रेंडरिंग और HttpModule.PostRequestHandlerExecute के बीच Thread.CurrentThread.CurrentCulture परिवर्तन क्यों करता है?

  • Page_Load के संस्कृति सेट करें::

    1. Module.PreRequestHandlerExecute:

      मैं इन चरणों के साथ एक सरल वेब अनुप्रयोग बनाने के द्वारा इस दोहराया गया है संस्कृति वर्तमान में ए सेट संस्कृति बी को

    2. मॉड्यूल है .PostRequestHandlerExecute: वर्तमान धागा संस्कृति ए मैं इसे बी होने की उम्मीद है, लेकिन यह पृष्ठ प्रतिपादन और PostRequestHandlerExecute

    किसी भी विचार क्यों नेट चा के बीच बदल गया था इस मूल्य को nges या मैं इसके आसपास कैसे मिल सकता है? धागा वही है, इसलिए नेट में कुछ स्पष्ट रूप से संस्कृति को वापस लेना चाहिए।

  • उत्तर

    2

    यदि आप बस एक थ्रेड स्विच के लिए संस्कृति सेट करते हैं तो किसी भी ऑपरेशन के परिणामस्वरूप थ्रेड स्विच (जैसे एएसपीनेट में पेज लाइफसाइक्ल का दूसरा भाग) परिणामस्वरूप डिफ़ॉल्ट संस्कृति में उलट जाएगा।

    पूरे आवेदन के लिए संस्कृति की स्थापना की सिफारिश की

    दृष्टिकोण यहाँ है ...

    http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

    यह पृष्ठ 3 विकल्प पर चर्चा करता है ...

    1. पृष्ठ स्तर पर संस्कृति सेट करना।
    2. प्रति अनुरोध प्रोग्रामेटिक रूप से संस्कृति की स्थापना।

    यह ध्यान देने योग्य है कि किसी भी मॉड्यूल को पृष्ठ अनुरोध के हिस्से के रूप में लोड किया जाता है, इसलिए पृष्ठ स्तर पर संस्कृति को बदलने से उस अनुरोध पर सभी मॉड्यूल के लिए इसे बदलना चाहिए।

    +0

    यह * अनुरोध पर सभी मॉड्यूल के लिए लोकेल को बदलना चाहिए, लेकिन ऐसा नहीं है। यही समस्या है। मूल प्रश्न में चरण 3 देखें। पृष्ठ प्रतिपादन और मॉड्यूल में पोस्ट-अनुरोध फायरिंग के बीच कोई थ्रेड स्विचिंग नहीं है। –

    +1

    आपके कोड में कोई थ्रेड स्विचिंग नहीं है लेकिन आप .Net कोड में इसकी गारंटी नहीं दे सकते। मेरा मानना ​​है कि आपको अनुरोध स्तर पर संस्कृति को स्थापित करने की आवश्यकता है, न कि थ्रेड स्तर जो मेरा उत्तर हल करता है। दूसरे शब्दों में, वर्तमान धागे पर संस्कृति को स्थापित करना या प्राप्त करना आपको वह नहीं देगा जो आप चाहते हैं। आपको पूरे अनुरोध को कॉन्फ़िगर करने की आवश्यकता है और ऐसा करने का तरीका मैन्युअल रूप से ओवरराइड करके इनिट संस्कृति ईवेंट को कार्यान्वित करना है। ... क्या आप समझे? – War

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

    • कोई संबंधित समस्या नहीं^_^