Bruke repeater i stedet for er:query
Dersom en bruker UserControl i stedet for eRedaktør tagger kan det være en må skrive om tidligere løsninger. Her er et par tips for å skrive om en er:query til asp:repeater.
Bilder
Her er et Example på en repeater som lister ut bilder i et galleri. For å velge hvilket galleri som skal vises brukes intSortField1 til å lagre CategoryId til bildemappen.
<asp:repeater ID="rptGallery" runat="server">
<ItemTemplate>
<section class='gallery-item'>
<img src='<%# Eval("FileUrl") %>?fw=214&fh=130' alt='' />
</section>
</ItemTemplate>
</asp:repeater>
Koden som henter ut innholdet til denne ser i dette tilfellet slik ut:
var gallery = from i in db.UploadedFiles
where i.Type == "image" &&
i.CategoryId == CurrentItem.intSortField1 &&
i.IsDeleted == false
orderby i.ItemOrder, i.Name
select new { FileUrl = i.FileUrl, ItemOrder = i.ItemOrder, Name = i.Name, Description = i.Description };
rptGallery.DataSource = gallery;
rptGallery.DataBind();
Tekst
Her er et Example som henter ut de 10 siste teksten fra feltsettet "tekst".
aspx:
<asp:Repeater ID="rptItemList" runat="server">
<ItemTemplate>
<div>
<h2><a href="<%# Eval("ItemUrl") %>"><%# Eval("Title") %></a></h2>
<p><%# Eval("Teaser") %></p>
</div>
</ItemTemplate>
</asp:Repeater>
aspx.cs:
var itemList = (from i in db.Items
where i.IsDeleted == false
&& i.IsPublished == true
&& i.PublishDate <= DateTime.Now
&& i.Template == db.Templates.FirstOrDefault(t => t.TemplateName == "tekst")
orderby i.PublishDate descending
select i).Take(10);
rptItemList.DataSource = itemList;
rptItemList.DataBind();
ifcount:
Men så er det designet slik at hvert fjerde bilde skal ha en egen klasse for å markere at det er siste på en linje. I er:query kan en bruke ifcount:mod4 for å gjøre dette. For å gjøre tilsvarende i en asp:repeater, kan en skrive:
<%# ((Container.ItemIndex + 1) % 4 == 0) ? @"layout-last" : string.Empty%>
Denne skriver ut "layout-last" på hvert fjerde bilde, og en tom streng på de andre. Dersom du ønsker å skrive ut noe annet på de tre foregående, kan du bytte ut string.Empty med f.eks. "layout-normal".