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>

そのエントリに null フィールドがない場合にのみ表示する方法を教えてもらえますか?

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

を使用しない理由

<% if()%> 

画像ソースがあるかどうかを判断するには?そうでない場合は、応答しなかったため、さらに節約できます

于 2012-10-10T01:43:41.843 に答える
0

ページ上の各画像をチェックして、そのプロモーションに関連付けられた画像があることを確認する jquery を追加しました。

$(document).ready(function () {

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

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

});

私はまだサーバー側のソリューションに興味があります

于 2012-10-10T00:02:03.770 に答える