Reputation: 6533
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
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
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
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