我正在尝试为管理和审核人面板创建自定义设置系统,以更改网站名称,说明等内容。我现在使用的方法是NameValueCollection类,它允许我在我的Web.Config文件中获取我定义的键的值,以显示在适当的位置。我的问题是,当它归结为更改这些值时,我得到 Collection是只读的。 ....在使用更新值和列出的定义时,有一小部分ActionResult我的配置。
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
NameValueCollection settings = new NameValueCollection();
settings = (NameValueCollection)ConfigurationManager.GetSection("settings");
settings.Set("siteName", SiteName);
settings.Set("siteDesc", SiteDesc);
return RedirectToAction("Index");
<section name="settings" type="System.Configuration.NameValueFileSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<settings>
<add key="siteName" value="Gizmo" />
<add key="siteDesc" value="Welcome to a Gizmo Powered Website." />
</settings>
一旦进入settings.Set();这就是错误开始的地方。无论如何我有解决这个问题吗?像在Web.Config中更新键和值的替代方法一样?
答案 0 :(得分:6)
首先,您正在创建NameValueCollection
的实例,然后立即重写它。其次,您没有使用配置变量。第三,使用NameValueCollection.Remove()
和Add()
方法。应该这样做......
参见以下示例(它与您想要的非常相似)
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
string key = "asd";
var origValue = config.AppSettings.Settings[key];
string newValue = origValue.Value + "changed";
config.AppSettings.Settings.Remove(key);
config.AppSettings.Settings.Add(key, newValue);
(是的 - 每次重写web.config时,应用程序都会重新启动。)