我正在创建一个具有集合属性的用户控件。我做了很多研究,我认为这在很大程度上是正确的。探测器是我通过标记定义集合的时候,我收到一个错误:
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>
答案 0 :(得分:0)
你应该看看这个:
http://msdn.microsoft.com/en-us/library/sbz9etab(v=vs.90).aspx
特别是页面顶部的标签
<%@ Register TagPrefix="uc" TagName="Spinner" Src="~/Controls/Spinner.ascx" %>
答案 1 :(得分:0)
您尝试从System.Web.UI.UserControl
继承的事实可能会导致问题。请尝试继承System.Web.UI.WebControl
。