1

因此,取决于转发器项目是否有链接,我想在图像周围使用链接,否则我只想输出链接。

现在我有

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

所以想添加类似的东西

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

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

3 回答 3

1

创建两个控件,一个作为链接,另一个作为图像控件。然后使用后面的代码来切换它们的可见性。根本不呈现不可见的 asp.net 控件,因此您应该没问题。改变这个:

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

对此:

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

如果您需要合并客户端 javascript,请为每个控件分配一个 CssClass 并在您的脚本中引用它。让我们知道进展如何,祝你好运。

于 2012-12-28T18:04:01.497 回答
1
<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> 
于 2012-12-28T18:23:17.557 回答
1

我会采取不同的方法。此外,您可能会Eval()在您的标记和代码中都使用而不是依赖于Container.DataItem,但我没有遵循特定的属性名称。

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

在您的代码隐藏中:

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

protected bool GetVisibleNoImage()
{
    return !string.IsNullOrEmpty((string)Eval("CallToActionUrl"));
} 
于 2012-12-28T18:43:32.693 回答