我正在创建一个 HttpModule,它需要知道在 MVC 应用程序中设置的 Thread.CurrentThread.CurrentCulture 的值。该值当前由 BaseController 设置,但是当我的 HttpModule.PostRequestHandlerExecute() 方法触发时,它会恢复为页面呈现之前的 Culture。
我通过以下步骤创建一个简单的网络应用程序来复制它:
- Module.PreRequestHandlerExecute:将文化设置为 A
- Page_Load:当前文化为 A。将文化设置为 B
- Module.PostRequestHandlerExecute:当前线程文化是 A。我预计它是 B,但它在页面呈现和 PostRequestHandlerExecute 之间发生了变化
知道为什么 .Net 会更改此值或我如何绕过它吗?线程是一样的,所以 .Net 中的某些东西必须明确地恢复文化。
最佳答案
如果您只是为正在运行的线程设置区域性,则任何导致线程切换的操作(例如 asp.net 中页面生命周期的另一部分)都会导致恢复为默认区域性。
推荐的方法在这里...
http://msdn.microsoft.com/en-us/library/bz9tc508.aspx
本页讨论了 3 个选项 ...
- 为整个应用设置文化。
- 在页面级别设置文化。
- 根据请求以编程方式设置文化。
值得注意的是,任何模块都是作为页面请求的一部分加载的,因此在页面级别更改区域性应该会针对该请求的所有模块更改它。
关于c# - 为什么 Thread.CurrentThread.CurrentCulture 在页面渲染和 HttpModule.PostRequestHandlerExecute 之间会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2329306/