1

我有一个包含图像的中继器。但是,此中继器中的所有促销活动中可能没有一张图片

<div class="promo">
    <h2><%# ((Promotion)Container.DataItem).Title %></h2>
    <p><img src="/Uploads/<%# ((Promotion)Container.DataItem).Image %>" alt="" class="promoImg" /><%# ((Promotion)Container.DataItem).Description %></p>
    <p><em><%# ((Promotion)Container.DataItem).Restrictions %></em></p>
</div>

如果该条目没有空字段,有人可以告诉我如何使唯一出现吗?

4

5 回答 5

2

我更喜欢在服务器端做一些事情,所以,我的建议是:

向转发器添加事件处理程序

 <asp:Repeater ID="myRpt" runat="server" onitemdatabound="myRpt_ItemDataBound" >
    <ItemTemplate>
        <div class="promo">
            <h2>
                <%# ((Promotion)Container.DataItem).Title %></h2>
            <p>
                <asp:Image ID="imgTest" CssClass="promoImg" ImageUrl="" runat="server" />
                <%# ((Promotion)Container.DataItem).Description %></p>
            <p>
                <em>
                    <%# ((Promotion)Container.DataItem).Restrictions %>
                </em>
            </p>
        </div>
    </ItemTemplate>
</asp:Repeater>

我将在后面的代码中“绑定”图像源,您也可以为其他控件执行此操作。所以,后面的代码是:

protected void myRpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==     ListItemType.AlternatingItem)
        {
            Image imgTest = (Image)e.Item.FindControl("imgTest");
            Promotion pActual = (Promotion)e.Item.DataItem;
            bool needToShowImage = !String.IsNullOrEmpty(pActual.Image)

            if (needToShowImage)
            {                    
                imgTest.ImageUrl = "Uploads/" + pActual.Image;
            }
            else
            {
                imgTest.Visible = false;
            }                
        }
    }

它会成功的。如果它不起作用,请告诉我。

于 2012-10-10T01:46:16.090 回答
1

这应该可以解决问题:

对于 C#.Net:

<div class="promo">
    <h2><%# ((Promotion)Container.DataItem).Title %></h2>
    <p><img runat="server" visible='<%# Information.IsDBNull(((Promotion)Container.DataItem).Image) %>' src=""/Uploads/<%# ((Promotion)Container.DataItem).Image.ToString %>" alt="no image found" class="promoImg" /><%# ((Promotion)Container.DataItem).Description %></p>
    <p><em><%# ((Promotion)Container.DataItem).Restrictions %></em></p>
</div>
于 2012-10-09T23:39:39.480 回答
0

我认为您可以使用面板来执行此操作。

  <div class="promo">
<h2><%# ((Promotion)Container.DataItem).Title %></h2>

<asp:Panel ID="pnlImage" runat="server">

<p><img src="/Uploads/<%# ((Promotion)Container.DataItem).Image %>" alt="" class="promoImg" /><%# ((Promotion)Container.DataItem).Description %></p>

</asp:Panel>

<p><em><%# ((Promotion)Container.DataItem).Restrictions %></em></p>

在 ItemDataBound 事件中,执行此操作

 if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
 if (((Promotion)e.Item.DataItem).Image == null) {
    ((Panel)e.Item.FindControl("pnlImage")).Visible = false;
 }

当面板不可见时,它不会被渲染。

于 2012-10-10T01:10:03.940 回答
0

我添加了一些 jquery 来检查页面上的每个图像,以确保有一个与该促销相关的图像:

$(document).ready(function () {

$('.promoImg').each(function (index) {

    if ($(this).attr('src') == "/Uploads/") {
        $(this).hide();
    }
});

});

我仍然对服务器端解决方案感兴趣

于 2012-10-10T00:02:03.770 回答
0

为什么不使用

<% if()%> 

判断是否有图片来源?如果没有,那么没有回应。所以我们可以节省更多

于 2012-10-10T01:43:41.843 回答