ASP.NET DataList绑定字节流图片为空时如何显示默认图片
方案1:前端内联表达式直接处理(推荐,代码量少)
直接修改ImageButton的ImageUrl绑定逻辑,加入空值判断即可:
<asp:ImageButton ID="userImage" CssClass="cardImage" CommandName="profile" runat="server" ImageUrl='<%# Eval("image") == DBNull.Value ? "/Images/blank.png" : "data:image/jpg;base64," + Convert.ToBase64String((byte[])Eval("image")) %>'/>
逻辑说明:先判断image字段是否为数据库空值,如果是直接返回占位图路径,否则执行base64转换生成图片地址,从根源避免空值转换报错。
方案2:后台ItemDataBound事件处理(适合逻辑更复杂的场景)
如果后续还有其他图片相关的判断逻辑,可以用DataList的绑定事件处理:
- 先给DataList添加
OnItemDataBound事件:
<asp:DataList ID="applicationsDataList" runat="server" RepeatColumns="4" OnItemCommand="itemCommand" OnItemDataBound="applicationsDataList_ItemDataBound" >
- 后台编写对应事件逻辑:
protected void applicationsDataList_ItemDataBound(object sender, DataListItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { // 找到当前行的ImageButton控件 ImageButton userImage = e.Item.FindControl("userImage") as ImageButton; // 获取当前绑定行的数据源 DataRowView row = e.Item.DataItem as DataRowView; // 判断图片字段是否为空 if (row["image"] == DBNull.Value) { userImage.ImageUrl = "/Images/blank.png"; } else { byte[] imgBytes = (byte[])row["image"]; userImage.ImageUrl = "data:image/jpg;base64," + Convert.ToBase64String(imgBytes); } } }
这种方式把判断逻辑放到后台,代码可读性更高,复杂场景下更容易维护。
内容的提问来源于stack exchange,提问作者notGoodAtThis
相关产品推荐
相关产品推荐

