If statement in repeater control

老子叫甜甜 提交于 2019-12-24 07:48:54

问题


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>

回答1:


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.




回答2:


<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> 



回答3:


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"));
} 


来源:https://stackoverflow.com/questions/14073606/if-statement-in-repeater-control

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!