2015-10-16 51 views
0

我已经在web.config中实现了自定义部分,并且希望在那里保存数据,在运行时调试时会检查它是否包含您放入并保存的所有值,并且没有任何异常。但web.config文件根本没有得到更新。自定义web.config部分不保存

<printers> 
    <PrintForm xmlPath="H:\Temp\print3.txt" formName="test-form" 
    sdateFormat="MM-dd-yyyy" createOnTechpadMarkAsComplete="true" 
    createOnSurveySubmit="true" /> 
    <Printers default="PrinterA"> 
    <clear /> 
    <printer location="1" name="PrinterA" /> 
    <printer location="2" name="PrinterB" /> 
    </Printers> 
</printers> 

这是我如何编辑它:在web.config中

public class PrintersSection : ConfigurationSection 
{ 
    [ConfigurationProperty("PrintForm", Options = ConfigurationPropertyOptions.IsRequired)] 
    public PrintFormElement PrintForm 
    { 
     get 
     { 
      return (PrintFormElement)this["PrintForm"]; 
     } 
     set { this["PrintForm"] = value; } 
    } 

    [ConfigurationProperty("Printers", Options = ConfigurationPropertyOptions.IsRequired)] 
    public PrintersCollection Printers 
    { 
     get 
     { 
      return (PrintersCollection)this["Printers"]; 
     } 
     set { this["Printers"] = value; } 
    } 

    public override bool IsReadOnly() 
    { 
     return false; 
    } 
} 



public class PrintFormElement : ConfigurationElement 
{ 
    [ConfigurationProperty("xmlPath")] 
    public string XmlPath 
    { 
     get 
     { 
      return (string)base["xmlPath"]; 
     } 
     set { base["xmlPath"] = value; } 
    } 

    [ConfigurationProperty("formName")] 
    public string FormName 
    { 
     get 
     { 
      return (string)base["formName"]; 
     } 
     set { base["formName"] = value; } 
    } 

    [ConfigurationProperty("sdateFormat")] 
    public string SDateFormat 
    { 
     get 
     { 
      return (string)base["sdateFormat"]; 
     } 
     set { base["sdateFormat"] = value; } 
    } 

    [ConfigurationProperty("createOnTechpadMarkAsComplete")] 
    public bool CreateOnTechpadMarkAsComplete 
    { 
     get 
     { 
      return (bool)base["createOnTechpadMarkAsComplete"]; 
     } 
     set { base["createOnTechpadMarkAsComplete"] = value; } 
    } 

    [ConfigurationProperty("createOnSurveySubmit")] 
    public bool CreateOnSurveySubmit 
    { 
     get 
     { 
      return (bool)base["createOnSurveySubmit"]; 
     } 
     set { base["createOnSurveySubmit"] = value; } 
    } 

    public override bool IsReadOnly() 
    { 
     return false; 
    } 
} 


[ConfigurationCollection(typeof(PrinterElement), AddItemName = "printer", CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap)] 
public class PrintersCollection : ConfigurationElementCollection 
{ 
    protected override ConfigurationElement CreateNewElement() 
    { 
     return new PrinterElement(); 
    } 

    protected override object GetElementKey(ConfigurationElement element) 
    { 
     if (element == null) 
      throw new ArgumentNullException("element"); 

     return ((PrinterElement)element).Location; 
    } 

    [ConfigurationProperty("default", IsRequired = false)] 
    public string Default 
    { 
     get 
     { 
      return (string)base["default"]; 
     } 
     set { base["default"] = value; } 
    } 

    public new PrinterElement this[string location] 
    { 
     get { return base.BaseGet(location) as PrinterElement; } 
    } 

    public void Add(PrinterElement element) 
    { 
     base.BaseAdd(element); 
    } 

    public void Clear() 
    { 
     base.BaseClear(); 
    } 

    public override bool IsReadOnly() 
    { 
     return false; 
    } 
} 


public class PrinterElement : ConfigurationElement 
{ 
    [ConfigurationProperty("location", IsRequired = true, IsKey = true)] 
    public string Location 
    { 
     get 
     { 
      return (string)base["location"]; 
     } 
     set { base["location"] = value; } 
    } 

    [ConfigurationProperty("name", IsRequired = true)] 
    public string Name 
    { 
     get 
     { 
      return (string)base["name"]; 
     } 
     set { base["name"] = value; } 
    } 

    public override bool IsReadOnly() 
    { 
     return false; 
    } 
} 

这看起来如何在web.config中

我有以下的自定义栏目

webConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~"); 

      var printXmlConfig = (PrintersSection)ConfigurationManager.GetSection("printers"); 

      printXmlConfig.PrintForm.XmlPath = model.PrintXMLPath; 
      printXmlConfig.PrintForm.FormName = model.PrintXMLFormName; 
      printXmlConfig.Printers.Default = model.PrintXMLPrinterName; 
      printXmlConfig.PrintForm.SDateFormat = model.PrintXMLSDateFormat; 
      printXmlConfig.PrintForm.CreateOnTechpadMarkAsComplete = model.PrintXMLCreateOnTechpadMarkAsComplete; 
      printXmlConfig.PrintForm.CreateOnSurveySubmit = model.PrintXMLCreateOnSurveySubmit; 
      printXmlConfig.Printers.Clear(); 
      model.PrinterPerLocation.ForEach(p => printXmlConfig.Printers.Add(new PrinterElement { Location = p.Key, Name = p.Value})); 

      webConfig.Save(); 

但web.config中没有更新,我在这里做错了什么?

回答

0

尝试

printXmlConfig.SectionInformation.ForceSave = true; 

webConfig.SectionInformation.ForceSave = true; 

webConfig.Save(ConfigurationSaveMode.Full); 
+0

目前,没有效果也试过'''webConfig.Save(ConfigurationSaveMode.Full,真);''' – Grievoushead

+0

您是否在调试器中检查了printXmlConfig中的值是否已更改? – Dexion

+0

是的,在调试器中他们正在更新,但没有在配置文件中,我试过力挽救 - 没有成功 – Grievoushead