3

我正在尝试为管理和版主面板创建自定义设置系统,以更改站点名称、描述等内容。我现在使用的方法是 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 中更新键和值的另一种方法吗?

4

1 回答 1

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 应用程序都会重新启动。)

于 2013-05-22T20:19:43.833 回答