简单的Sitecore ASP中继器-访问字段
本文关键字:访问 字段 中继器 ASP Sitecore 简单 | 更新日期: 2023-09-27 18:13:56
我有一个非常基本的网站核心问题。我想遍历一组子对象(位置),并显示每个子对象的一些信息。
我正在使用ASP重复器进行迭代,我正在获取页面加载上的孩子,并且我正在尝试使用sc标签来显示信息-但我没有在页面上显示。
谁能帮我看看我在这里错过了什么?
背后的代码:
protected void Page_Load(object sender, EventArgs e)
{
var item = Sitecore.Context.Item;
var children = new List<Sitecore.Data.Items.Item>();
foreach (var child in item.GetChildren())
{
children.Add((Sitecore.Data.Items.Item)child);
}
LocationsRpt.DataSource = children;
LocationsRpt.DataBind();
}
标记:
<asp:Repeater runat="server" ID="LocationsRpt" OnItemDataBound="LocationsRptItemDataBound">
<ItemTemplate>
<div class="InnerContentSec clearfix">
<div id="AboutSolar" class="AboutSolar clearfix">
<div class="items">
<h3>
<sc:Text runat="server" ID="Title"/>
</h3>
<div class="LocationBlock clearfix">
<div class="ImgSec">
<sc:Image id="Image" runat="server" Width="185" Height="107" />
</div>
<div class="DescSec">
<p><sc:Text ID="ShortDescription" runat="server" /></p>
</div>
</div>
</div>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
最后是DataItemBound
protected void LocationsRptItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var subItem = e.Item.DataItem as Item;
if (subItem != null)
{
var appTitle = e.Item.FindControl("Title") as Sitecore.Web.UI.WebControls.Text;
if (appTitle != null)
{
appTitle.DataSource = subItem.ID.ToString();
appTitle.Field = "Application Title";
appTitle.DataBind();
}
var appImage = e.Item.FindControl("Image") as Sitecore.Web.UI.WebControls.Image;
if (appImage != null)
{
appImage.DataSource = subItem.ID.ToString();
appImage.Field = "Location Image";
appImage.DataBind();
}
var shortDescription = e.Item.FindControl("ShortDescription") as Sitecore.Web.UI.WebControls.Text;
if (shortDescription != null)
{
shortDescription.DataSource = subItem.ID.ToString();
shortDescription.Field = "Short Description";
shortDescription.DataBind();
}
}
}
}
你也可以这样做:
新:protected void Page_Load(object sender, EventArgs e)
{
LocationsRpt.DataSource = Sitecore.Context.Item.GetChildren();
LocationsRpt.DataBind();
}
标记:
<asp:Repeater runat="server" ID="LocationsRpt">
<ItemTemplate>
<div class="InnerContentSec clearfix">
<div id="AboutSolar" class="AboutSolar clearfix">
<div class="items">
<h3>
<sc:Text runat="server" ID="Title" Item="<%# Container.DataItem %>"/>
</h3>
<div class="LocationBlock clearfix">
<div class="ImgSec">
<sc:Image id="Image" runat="server" Width="185" Height="107" Item="<%# Container.DataItem %>" />
</div>
<div class="DescSec">
<p><sc:Text ID="ShortDescription" runat="server" Item="<%# Container.DataItem %>" /></p>
</div>
</div>
</div>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
在这种情况下,您不需要绑定事件
我太快了,你在我回复后添加了你的eventandler代码。
在你的事件处理程序中,你应该为字段控件设置Item
属性。例如:appTitle.Item = item
你不需要为这些控件调用DataBind()
另外,您可以使用item.GetChildren()
作为中继器的数据源,您不必将子列表复制到新列表。