2015-10-16 63 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