以编程方式更改Web.Config中的文化

时间:2014-03-14 21:44:15

标签: c# asp.net

我的配置应用程序从用户收集文化。在用户进行选择后捕获它。

CultureInfo culture = new CultureInfo(selectedCulture);

现在,我需要更新主应用程序的Web.config。目前,默认为en-us

<system.web>
    ...
    <globalization culture="en-us" responseEncoding="utf-8" />
    ...
</system.web>

这是我到目前为止所管理的内容,我未能通过TODO突出显示该部分。

XmlDocument config = new XmlDocument();
config.Load("C:\\inetpub\\wwwroot\\MyProject\\web.config");
// TODO - Modify the globalization culture
config.Save("C:\\inetpub\\wwwroot\\MyProject\\web.config");

我看到了按ID抓取元素的方法,但我的全球化并没有ID。当我试图给它一个ID时,我得到The "id" attribute is not allowed.什么方法会以允许我改变文化的方式操纵全球化元素?我是否需要使用其他结构来加载文档?

2 个答案:

答案 0 :(得分:2)

您可以使用Xpath查找元素,然后更新数据:

XmlDocument config = new XmlDocument();
config.Load("C:\\inetpub\\wwwroot\\MyProject\\web.config");

var node = config.SelectNodes("system.web/globalization")[0];
node.Attributes["culture"].Value = "new value";

config.Save("C:\\inetpub\\wwwroot\\MyProject\\web.config");

答案 1 :(得分:0)

您需要考虑:如果您修改了web.config,ASP.NET将重新启动您的应用程序。

除此之外,您可以在web.config中设置全球化,例如:

<system.web> ... <globalization culture="auto" responseEncoding="utf-8" /> ... </system.web>

然后,你可以像@ luke-mcgregor所说的那样使用Thread.CurrentCulture来检索用户的文化