コレクション プロパティを持つユーザー コントロールを作成しています。私は多くの調査を行いましたが、ほとんどの場合、正しいと思います。問題は、マークアップを使用してコレクションを定義すると、エラーが発生することです。
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>