ネストされたリピーター内でHyperlink Controlを取得して、現在のSitecoreテンプレートの「Item No」フィールド値または「Menu Title」フィールド値を表示しようとしています。これらのフィールドの1つは、リピータ内でソートされたすべてのテンプレートに存在します。しかし、私が直面している問題は、コードの背後にあるItemDataBound関数がハイパーリンクコントロールを見つけることです。これまでのところ、コードはそれが存在しないと言っています。ここで2つのSitecoreテンプレートフィールドの1つをネストされたリピーターのハイパーリンクに配置します
はリピーターです:
<asp:Repeater ID="ProductCategories" runat="server" ItemType="Sitecore.Data.Items.Item" Visible="true" OnItemDataBound="ProductCategories_ItemDataBound">
<ItemTemplate>
<div class="left-nav-section clearfix">
<div class="left-nav-section-arrow clearfix"></div>
<a class="left-nav-sub-section-title" href="<%# Sitecore.Links.LinkManager.GetItemUrl(Item) %>" runat="server">
<%# Item.Fields["Menu Title"].Value %>
</a>
<div class="the-tiers">
<asp:Repeater runat="server" ID="CategoriesRepeater" ItemType="Sitecore.Data.Items.Item">
<ItemTemplate>
<asp:HyperLink ID="ItemURL" runat="server" NavigateUrl="<%# Sitecore.Links.LinkManager.GetItemUrl(Item) %>"/>
</ItemTemplate>
</asp:Repeater>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
そして、ここではそのリピーターのためのItemDataBoundイベントです:
protected void ProductCategories_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
var catItem = e.Item.DataItem as Item;
Repeater categoriesRepeater = e.Item.FindControl("CategoriesRepeater") as Repeater;
var catProducts = catItem.GetChildren();
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
HyperLink itemLink = (HyperLink)e.Item.FindControl("ItemURL");
foreach (Item catProduct in catProducts)
{
if (catProduct.TemplateID.ToString() == productListingTemplateID.ToString())
{
itemLink.Text = catProduct.Fields["Menu Title"].ToString();
}
else
{
itemLink.Text = catProduct.Fields["Item No"].ToString();
}
}
}
if (catProducts.ToList().Count == 0)
{
return;
}
categoriesRepeater.DataSource = catProducts;
categoriesRepeater.DataBind();
}
そして、ここでは、私がのテキストプロパティを設定しようとしたときに表示されるエラーですハイパーリンク:
Object reference not set to an instance of an object