【发布时间】:2016-09-23 16:35:02
【问题描述】:
我正在尝试在嵌套中继器中获取一个超链接控件,以显示当前 Sitecore 模板的“项目编号”字段值或“菜单标题”字段值。这些字段之一将存在于转发器中排序的所有模板上。但我面临的问题是获取 ItemDataBound 函数背后的代码来查找超链接控件。到目前为止,代码一直说它不存在。
这是中继器:
<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
【问题讨论】:
标签: c# hyperlink sitecore repeater sitecore7