2012-10-09 35 views
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> 

能有人告訴我如何讓僅會在該條目沒有空場的圖像?

回答

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

我應該澄清圖像列只存儲字符串文件名。這個解決方案似乎只有src屬性會改變。我想一起刪除img標籤 –

+0

您是使用VB.Net還是C#.Net? – pete

+0

C# - 我只是在頁面中添加了一些jquery:檢查每個圖像,如果attr src爲null,則隱藏圖像。我也接受服務器端解決方案。 –

0

我已經添加了一些jQuery來查看頁面上的每個圖像,以確保有一個與促銷相關的圖像:

$(document).ready(function() { 

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

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

});

我仍然有興趣在服務器端解決方案

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

當面板是看不見的,它不會被渲染。

0

爲什麼不使用

<% if()%> 

判斷要麼是有圖像源?如果沒有,那麼沒有response.so我們可以節省更多的

+0

我想你錯過了一些代碼... – mbinette

+0

我不會使用數據綁定 – TryingToImprove

2

我寧願做在服務器端的東西,所以,我sugestion是:

添加事件處理程序到你的中繼

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

它會做的。如果它不工作,請讓我知道。

+0

其中needToShowImage定義? –

+0

你寫道:「有一張圖片可能不是所有的促銷活動」,所以,告訴我你?什麼是不需要顯示圖像的規則。 – Ewerton

+0

如果字段沒有在圖像不需要顯示的列中標出文件名。 –

相關問題