0

我正在创建一个具有集合属性的用户控件。我做了很多研究,我认为它在很大程度上是正确的。问题是当我通过标记定义集合时,出现错误:

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>
4

2 回答 2

0

您尝试继承的事实System.Web.UI.UserControl可能会导致问题。尝试从继承System.Web.UI.WebControl

于 2013-09-16T21:00:03.603 回答
0

You should look at this:

http://msdn.microsoft.com/en-us/library/sbz9etab(v=vs.90).aspx

Especially this tag at the top of the page

<%@ Register TagPrefix="uc" TagName="Spinner" Src="~/Controls/Spinner.ascx" %>
于 2013-09-16T19:58:36.473 回答