具有集合属性的用户控件:对象的类型为'System.Web.UI.HtmlControls.HtmlGenericControl'

时间:2013-09-16 19:53:01

标签: asp.net user-controls

我正在创建一个具有集合属性的用户控件。我做了很多研究,我认为这在很大程度上是正确的。探测器是我通过标记定义集合的时候,我收到一个错误:

  

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>

2 个答案:

答案 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