我正在创建一个具有集合属性的用户控件。我做了很多研究,我认为它在很大程度上是正确的。问题是当我通过标记定义集合时,出现错误:
UserControls.BreadcrumbItemCollection 必须具有 UserControls.BreadcrumbItem' 类型的项目。'BreadcrumbItem' 的类型为 'System.Web.UI.HtmlControls.HtmlGenericControl'。
我不确定为什么 TemplateParser 认为 BreadCrumbItem 的类型是“System.Web.UI.HtmlControl.HtmlGenericControl”,但是我可以在用户控件中做些什么来解决这个问题?如果我创建了一个 BreadCrumbItem 类型的属性(无集合),那么 TemplateParser 会解析标记并生成一个 BreadcrumbItem 实例就好了,那么为什么不在集合上呢?
这是我的用户控件:
[PersistChildren(false)]
public partial class Breadcrumb : System.Web.UI.UserControl, INamingContainer
{
private readonly BreadcrumbItemCollection lstBreadCrumbs_m = new BreadcrumbItemCollection();
[PersistenceMode(PersistenceMode.InnerProperty)]
public BreadcrumbItemCollection Items { get; set; }
}
[PersistenceMode(PersistenceMode.InnerProperty)]
public class BreadcrumbItemCollection : System.Collections.Generic.List<BreadcrumbItem>
{
}
[Serializable]
public class BreadcrumbItem
{
public BreadcrumbItem()
{
}
public BreadcrumbItem(string sValue)
: base()
{
this.Value = sValue;
}
public string Value
{
get;
set;
}
public override string ToString()
{
return this.Value;
}
/// <summary>
/// explicit string to BreadcrumbItem operator
/// </summary>
/// <param name="sValue"></param>
/// <returns></returns>
public static explicit operator BreadcrumbItem(string sValue)
{
BreadcrumbItem crumb = new BreadcrumbItem(sValue); // explicit conversion
return crumb;
}
}
我的标记如下所示:
<%@ Page ...
<%@ Register Src="~/UserControls/Breadcrumb.ascx" TagPrefix="uc1" TagName="Breadcrumb" %>
...
<uc1:Breadcrumb runat="server" ID="Breadcrumb">
<Items>
<BreadcrumbItem Value="test"></BreadcrumbItem>
</Items>
</uc1:Breadcrumb>