自定义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;
问题是你的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;
我已经对此进行了测试,并验证了这些更改将成功地读入配置