2016-12-12 3 views
0

Я хочу отобразить фиктивное изображение из папки, когда значение равно null. Среднее значение, когда ImageUrl='<%# "~/ProductImageHandler.ashx?Id="+ Eval("Id") %>' имеет значение null, я хочу отобразить фиктивное изображение из любой папки, которую я буду размещать в проекте. Так как я могу сделать этотернарный оператор для отображения изображения в gridview

<asp:Image ID="imgProduct" Width="200px" runat="server" CommandArgument='<%#Eval("ItemId")%>' 
ImageUrl='<%# "~/ProductImageHandler.ashx?Id="+ Eval("Id") %>' CommandName="ViewProductImage"/> 

ProductImageHandler.cs файл

public class ProductImageHandler : IHttpHandler 
    { 

     public void ProcessRequest(HttpContext context) 
     { 
      int itemID = 0; 
      int.TryParse(context.Request.QueryString["Id"].ToString(), out itemID); 
      if (itemID > 0) 
      { 
       context.Response.ContentType = "image/jpeg"; 
       Stream strm = ShowImage(itemID); 
       byte[] buffer = new byte[4096]; 
       int byteSeq = strm.Read(buffer, 0, 4096); 

       while (byteSeq > 0) 
       { 
        context.Response.OutputStream.Write(buffer, 0, byteSeq); 
        byteSeq = strm.Read(buffer, 0, 4096); 
       } 
      } 
     } 
     /// <summary> 
     /// 
     /// </summary> 
     /// <param name="Zoneid"></param> 
     /// <returns></returns> 
     private Stream ShowImage(int itemID) 
     { 
      WmsItemListDAC _WmsItemListDAC = null; 
      DataTable dtProduct = new DataTable(); 
      if (_WmsItemListDAC == null) 
       _WmsItemListDAC = new WmsItemListDAC(); 
      if (dtProduct == null) 
       dtProduct = new DataTable(); 

      dtProduct = _WmsItemListDAC.GetProductImageByItemID(itemID); 
      if (dtProduct.Rows[0]["PICTURE"] != null) 
      { 
       byte[] image = (byte[])dtProduct.Rows[0]["PICTURE"]; 
       return new MemoryStream(image); 
      } 
      else 
      { 
       return null; 
      } 
     } 
     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 

ответ

0

Вы можете сделать это следующим образом:

<asp:Image ID="imgProduct" runat="server" ImageUrl='<%# Convert.ToInt32(Eval("Id")) > 0 ? "~/ProductImageHandler.ashx?Id="+ Eval("Id") : "~/dummy.jpg" %>' /> 

Когда Id больше, что ноль будет установлен ImageUrl обработчику. Если не отображается манекен.

Если Id не всегда является целым числом, вы можете просто проверить пустые строки.

<asp:Image ID="imgProduct" runat="server" ImageUrl='<%# !string.IsNullOrEmpty(Eval("Id").ToString()) ? "~/ProductImageHandler.ashx?Id="+ Eval("Id") : "~/dummy.jpg" %>' /> 
+0

жаль не работают для меня –

+0

я всегда буду иметь Itemid, но не обязательно, что каждый элемент имеет изображение, поэтому я хочу, что время фиктивного изображения на этом. –

+0

Тогда в чем проблема? Если изображение отсутствует, но всегда запрос делается на «ProductImageHandler.ashx», вы можете просто отмахиваться оттуда. – VDWWD