New Technique For Databinding Sitecore Items
Posted
Wednesday, September 8, 2010 11:03 PM
by
Kevin
For a while now, I’ve been primarily using Sitecore sublayouts as my rendering-of-choice. The suite of controls available are hard to resist, and it’s easier for someone that doesn’t know XSLT or Sitecore to modify the sublayouts (they’re just user controls, after all). Recently, I’ve started data binding SItecore items to ASP.NET Repeater controls in my sublayouts in a new way using LINQ.
For example, let’s say we have a multilist field on the current item and we want to display a list of the linked items with thumbnails and short descriptions. Here’s how I might now build my Repeater for that:
<asp:Repeater id=“SeeMoreRepeater” runat=“server”>
<ItemTemplate>
<sc:Image runat=“server” Item=“<%# Container.DataItem %>” Field=“Thumbnail” />
<div class=“header”>
<sc:Text runat=“server” Item=“<%# Container.DataItem %>” Field=“Title” />
</div>
<p>
<sc:FieldRenderer runat=“server” Item=“<%# Container.DataItem %>” Field=“ShortDescription” />
</p>
</ItemTemplate>
</asp:Repeater>
Code-behind looks like this:
MultiListField seeMoreField = Sitecore.Context.Item.Fields[“SeeMore”];
SeeMoreRepeater.DataSource = seeMoreField.TargetIDs.Select( id => Sitecore.Context.Database.GetItem(id) );
SeeMoreRepeater.DataBind();
This seems like a very clean way to build a Repeater control and a clean way to data bind in code-behind. Additionally, using the <sc:Image>, <sc:Text>, and <sc:FieldRenderer> controls enables the content to be edited when the page is viewed in Sitecore’s page editor.
What do you think?