因此,根据转发器项目是否有链接,我想在图像周围使用链接,否则我只想放出链接。
现在我有
<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>
答案 0 :(得分: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并在脚本中引用它。让我们知道它是怎么回事,祝你好运。
答案 1 :(得分: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>
答案 2 :(得分: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"));
}