StevieB
StevieB

Reputation: 6533

If statement in repeater control

So depending on if the repeater item has a link or not I want to use a link around an image otherwise I just want to out put link.

Right now I have

<asp:Repeater ID="BannerImageRepeater" runat="server">
    <ItemTemplate>
        <a href="<%# ((BannerImage)Container.DataItem).CallToActionUrl %>"><img src="<%# ((BannerImage)Container.DataItem).ImageUrl %>?w=980&h=600" alt="<%# ((BannerImage)Container.DataItem).AltText %>"/></a>
    </ItemTemplate>
</asp:Repeater>   

So wanted to add something like

String.IsNullOrEmpty(((BannerImage)Container.DataItem).CallToActionUrl)

<img src="">
else
<a href=''><img src=""></a>

Upvotes: 1

Views: 7987

Answers (3)

andleer
andleer

Reputation: 22568

I would take a different approach. Also, you can likely use Eval() in both your markup and code behind instead of relying on Container.DataItem, but I am not following the specific property names.

<asp:Repeater ID="BannerImageRepeater" runat="server">
    <ItemTemplate>
        <asp:PlaceHolder runat="server" Visible="<%# GetVisibleImage() %>">
        <a href="<%# ((BannerImage)Container.DataItem).CallToActionUrl %>">
            <img src="<%# ((BannerImage)Container.DataItem).ImageUrl %>
                ?w=980&h=600" alt="<%# ((BannerImage)Container.DataItem).AltText %>"/>
        </a>
        </asp:PlaceHolder>
        <asp:PlaceHolder runat="server" Visible="<%# GetVisibleNoImage() %>">
        <img src="<%# ((BannerImage)Container.DataItem).ImageUrl %>
                ?w=980&h=600" alt="<%# ((BannerImage)Container.DataItem).AltText %>"/>
        </asp:PlaceHolder>
    </ItemTemplate>
</asp:Repeater>

In your codebehind:

protected bool GetVisibleImage()
{
    return string.IsNullOrEmpty((string)Eval("CallToActionUrl"));
}

protected bool GetVisibleNoImage()
{
    return !string.IsNullOrEmpty((string)Eval("CallToActionUrl"));
} 

Upvotes: 1

sreejithsdev
sreejithsdev

Reputation: 1210

<asp:Repeater ID="BannerImageRepeater" runat="server">
    <ItemTemplate>
    <% if(String.IsNullOrEmpty(((BannerImage)Container.DataItem).CallToActionUrl)) { %>
<img src="<%# ((BannerImage)Container.DataItem).ImageUrl %>?w=980&h=600" alt="<%# ((BannerImage)Container.DataItem).AltText %>"/>
<% } else { %>
        <a href="<%# ((BannerImage)Container.DataItem).CallToActionUrl %>"><img src="<%# ((BannerImage)Container.DataItem).ImageUrl %>?w=980&h=600" alt="<%# ((BannerImage)Container.DataItem).AltText %>"/></a>
<% } %>
    </ItemTemplate>
</asp:Repeater> 

Upvotes: 1

Ross Brasseaux
Ross Brasseaux

Reputation: 4150

Create two controls, one as a link and the other an image control. Then use code behind to toggle their visibility. An invisible asp.net control is not rendered at all so you should be fine. Change this:

<asp:Repeater ID="BannerImageRepeater" runat="server">
        <ItemTemplate>
            <a href="<%# ((BannerImage)Container.DataItem).CallToActionUrl %>"><img src="<%# ((BannerImage)Container.DataItem).ImageUrl %>?w=980&h=600" alt="<%# ((BannerImage)Container.DataItem).AltText %>"/></a>
        </ItemTemplate>
    </asp:Repeater>   

To this:

<asp:Repeater ID="BannerImageRepeater" runat="server">
        <ItemTemplate>
            <asp:hyperlink id="yes_link" runat="server" NavigateUrl="<%# ((BannerImage)Container.DataItem).CallToActionUrl %>"><img src="<%# ((BannerImage)Container.DataItem).ImageUrl %>?w=980&h=600" alt="<%# ((BannerImage)Container.DataItem).AltText %>"/></asp:hyperlink>
            <asp:image id="no_link" runat="server" ImageUrl="<%# ((BannerImage)Container.DataItem).ImageUrl %>?w=980&h=600" alt="<%# ((BannerImage)Container.DataItem).AltText %>" />
        </ItemTemplate>
    </asp:Repeater> 

If you need to incorporate client side javascript, assign each control a CssClass and reference that in your script. Let us know how it goes and good luck.

Upvotes: 1

Related Questions