我想在值为null时显示文件夹中的虚拟图像。意味着当ImageUrl='<%# "~/ProductImageHandler.ashx?Id="+ Eval("Id") %>'
具有空值时,我想从我将放置在项目中的任何文件夹中显示虚拟图像。那我该怎么做呢
<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 :(得分: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" %>' />