【发布时间】:2013-09-17 05:00:03
【问题描述】:
我正在创建一个具有集合属性的用户控件。我做了很多研究,我认为它在很大程度上是正确的。问题是当我通过标记定义集合时,出现错误:
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>
【问题讨论】:
-
你能在你的演员表操作符中到达一个断点吗?你试过
BreadcrumbItem : HtmlGenericControl。 -
@mrtig - 没有。错误发生在解析过程中,远在我的任何代码实际执行之前。
标签: asp.net user-controls