简单的Sitecore ASP中继器 - 访问字段

Ale*_*iak 1 c# asp.net sitecore

我在这里有一个非常基本的站点核心问题.我想迭代一组子对象(位置),并显示有关每个对象的一些信息.

我正在使用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();
    }
Run Code Online (Sandbox Code Playgroud)

标记:

<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>
Run Code Online (Sandbox Code Playgroud)

最后,在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();
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Tra*_*yek 9

你也可以这样做:

页面加载:

protected void Page_Load(object sender, EventArgs e)
{
    LocationsRpt.DataSource = Sitecore.Context.Item.GetChildren();
    LocationsRpt.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

标记:

<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>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您不需要数据绑定事件.

  • 你也可以将转发器DataSource设置为`<asp:Repeater runat ="server"DataSource ="<%#Sitecore.Context.Item.GetChildren()%>">``如果你想摆脱CodeBehind :) (2认同)