【问题标题】:User control with collection property: object is of type 'System.Web.UI.HtmlControls.HtmlGenericControl'具有集合属性的用户控件:对象的类型为“System.Web.UI.HtmlControls.HtmlGenericControl”
【发布时间】: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


【解决方案1】:

你应该看看这个:

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

尤其是页面顶部的这个标签

<%@ Register TagPrefix="uc" TagName="Spinner" Src="~/Controls/Spinner.ascx" %>

【讨论】:

  • 抱歉,这不是我的问题。我按要求在页面上有注册说明,页面识别用户控件。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2020-01-12
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    相关资源
    最近更新 更多