我有一个美国客户,他希望所有时间都显示为军事时间,但其他一切时间都应该是美国文化。
在我的 global.asax 中,我正在创建美国文化的副本并应用 GB 时间显示来创建具有军事时间的美国文化。
我这样做的原因是我找不到能够做到这一点的文化,但是如果有人知道,那就太好了。
我遇到的问题是,当我们将网站部署到 IIS(版本 6)时,一切似乎都恢复到了美国文化。
查找如何更改文化,我在 ASP.NET 选项卡 -> 编辑配置 -> 应用程序选项卡中找到了设置
默认值为 af-ZA。
似乎没有选项可以禁用这种文化覆盖,而且我不相信 af-ZA 是正确的?
有没有办法防止 IIS 覆盖在 ASP.NET 中以编程方式设置的文化?
注意:在这里提问是因为我正在寻找服务器端解决方案,而不是编程解决方案。谢谢!
答案1
这至少部分是编码问题。基本上,您需要使用 System.Globalization 中的 CultureAndRegionInfoBuilder 类创建并注册您的新文化。
注册后,您可以在 ASP.Net 应用程序设置中选择新的文化。(或在您的应用程序的 web.config 文件中)。
以下是一些可以帮助您入门的参考资料:
http://msdn.microsoft.com/en-us/library/ms172469.aspx
http://msdn.microsoft.com/en-us/library/system.globalization.cultureandregioninfobuilder.aspx
答案2
在与更精通服务器和 asp.net 的人交谈后,我找到了问题的答案
显然,你只能在 Web.config 中设置应用程序范围的文化
我在 global.asax 中的应用程序主线程中设置它,但它不会延续到处理页面请求的子线程。
有趣的是,当通过 Visual Studio 的托管进程在本地机器上运行时,所有请求都必须通过同一个线程完成。
这让我相信这是一个 IIS 问题,因为直到我们把它放到 IIS 上时问题才出现。
我的解决方案:(接受了更合适的解决方案)
必须在每个页面请求线程上设置自定义文化。我的解决方案是将其放入主页加载中。IIS 不会覆盖您的设置。