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

2つのコントロールを作成します。1つはリンクとして、もう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

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"));
} 
于 2012-12-28T18:43:32.693 に答える
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 に答える