自定义WebConfig部分返回集合属性

本文关键字:集合 属性 返回 WebConfig 自定义 | 更新日期: 2023-09-27 18:19:13

我在访问我的pages元素的属性集合属性"name"时遇到问题。Pages有一个具有属性的页面字段集合,有人可以看看我的代码,并告诉我如何在每个页面上有一个名称属性的页面集合,并访问其值。此刻我的代码返回什么也没有,但页面加载没有任何错误,所以我不知道发生了什么,以及如何获得属性字段。

<configSections>
  <sectionGroup name="site" type="MyProject.Configuration.Site">
    <section name="pages" type="MyProject.Configuration.Pages"/>      
  </sectionGroup>  
</configSections>

<site>
  <pages>
    <page name="test">        
    </page>
  </pages>    
</site>

类:

public class Site : ConfigurationSection
{
    [ConfigurationProperty("pages")]
    [ConfigurationCollection(typeof(PageCollection), AddItemName="page")]
    public PageCollection Pages
    {
        get
        {
            return base["pages"] as PageCollection;
        }
    }
}
public class PageCollection : ConfigurationElementCollection
{
    public PageCollection()
    {
        PageElement element = (PageElement)CreateNewElement();
        BaseAdd(element); // doesn't work here does if i remove it
    }
    protected override ConfigurationElement CreateNewElement()
    {
        return new PageElement();
    }
    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((PageElement)element).Name;
    }
    public PageElement this[int index]
    {
        get
        {
            return (PageElement)BaseGet(index);
        }
        set
        {
            if (BaseGet(index) != null)
            {
                BaseRemoveAt(index);
            }
            BaseAdd(index, value);
        }
    }
}
public class PageElement : ConfigurationElement
{
    public PageElement() { }
    [ConfigurationProperty("name", IsKey=true, IsRequired=true)]
    public string Name
    {
        get
        {
            return (string)base["name"];
        }
        set
        {
            base["name"] = value;
        }
    }
}

访问属性的代码:

Pages pageSettings = ConfigurationManager.GetSection("site/pages") as Pages;
lblPage.Text = pageSettings.Page[0].Name;

自定义WebConfig部分返回集合属性

问题是你的section元素应该是site,而不是pages:

public class Site: ConfigurationSection
{
    [ConfigurationProperty("pages")]
    public PageCollection Page
    {
        get
        {
            return base["pages"] as PageCollection;
        }
    }
}

结果是有几个问题需要解决:

1)网。需要将配置更改为节而不是节组,并且应该删除pages元素:

  <configSections>
    <section name="site" type="MyProject.Configuration.Site, MyProject.Configuration">
    </section>
  </configSections>

2) Site类需要修改:

public class Site : ConfigurationSection
{
    [ConfigurationProperty("pages")]
    [ConfigurationCollection(typeof(PageCollection), AddItemName="page")]
    public PageCollection pages
    {
        get
        {
            return base["pages"] as PageCollection;
        }
    }
}

3)需要删除PageCollection构造函数的代码。

    public PageCollection()
    {
    }

4)需要从PageCollection中删除name属性,或者至少标记为不需要。

5)检索设置的调用现在是:
Site site = ConfigurationManager.GetSection("site") as Site;

我已经对此进行了测试,并验证了这些更改将成功地读入配置

相关文章: