2013-05-22 7 views
3

Я пытаюсь создать собственную систему настроек для панели администрирования и модератора, которая изменяет такие вещи, как имя сайта, описание и т. Д. Метод, который я использую сейчас, это класс NameValueCollection, который позволяет мне получать значения моих определенных ключей в моем файле Web.Config для отображения в соответствующих местах. Моя проблема в том, что когда дело доходит до изменения этих значений, я получаю . Коллекция доступна только для чтения. .... Есть небольшой фрагмент ActionResult в использовании для обновления значений и определений, перечисленных в моей конфигурации.C# - Ошибка: коллекция доступна только для чтения

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

в вашем примере я не вижу, где вы используете 'config', поэтому вы можете удалить его из этого примера – Epsil0neR

+0

Im не соответствует –

+1

Вы пытаетесь изменить web.config того же сайта, где ваш код бежит? – giacomelli

ответ

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 приложение перезапускается .)

+0

Итак, asp будет ? –

+0

Да, мое тестирование web.config выглядит следующим образом: <конфигурация> <добавить ключ = "ASD" значение = "АСС" /> rocky

+0

Благодаря человеку основным главным спасибо !! !!! Но проверьте это, я работаю над проектом для веб-технологий, если ваш желающий присоединиться к id может использовать руку! –

Смежные вопросы