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

これを見てください:

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

特にページ上部のこのタグ

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