我目前從資料庫中檢索資料并將其存盤在資料串列中。其中一項是用于顯示影像的位元組值。該代碼有效,但是,當沒有可用影像時,由于嘗試對空值執行操作而遇到錯誤。如果資料庫的影像欄位中沒有值,是否有任何方法可以顯示默認影像,例如在有問題的影像下方的影像按鈕中找到的影像?
<asp:DataList ID="applicationsDataList" runat="server" RepeatColumns="4" OnItemCommand="itemCommand" >
<ItemTemplate>
<table>
<tr>
<td>
<asp:ImageButton ID="userImage" CssClass="cardImage" CommandName="profile" runat="server" ImageUrl='<%# "data:image/jpg;base64," Convert.ToBase64String((byte[])Eval("image")) %>'/>
<%--<asp:ImageButton CssClass="cardImage" CommandName="profile" runat="server" ImageUrl="/Images/blank.png"/>--%>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
感謝天才!
uj5u.com熱心網友回復:
您可以使用 C# 的三元運算子來檢查該值是否為 null,并為默認影像插入一個 base64 字串。
像這樣的東西:
ImageUrl='<%# "data:image/jpg;base64," Eval("image") != null ? Convert.ToBase64String((byte[])Eval("image")) : Convert.ToBase64String(GetDefaultImage()) %>'
那是假設Eval("image")正在回傳null?如果可能,最好將呼叫移到Eval()運算式之外,這樣您就不會呼叫它兩次(一次在條件中,一次在結果中)。然后,您可以定義一個函式,例如GetDefaultImage()回傳帶有默認影像的位元組陣列。
uj5u.com熱心網友回復:
這就是我最后用來解決問題的方法:)
ImageUrl='<%# !string.IsNullOrEmpty(Eval("image").ToString()) ? "data:image/jpg;base64," Convert.ToBase64String((byte[])Eval("image")) : "/Images/blank.png" %>' />
uj5u.com熱心網友回復:
您可以像前面提到的那樣處理更“復雜”的運算式。但話又說回來?我經常只是在資料系結事件中撰寫代碼。
所以,有了這個:
<asp:ImageButton ID="userImage" CssClass="cardImage" CommandName="profile"
runat="server"/>
然后只需將上述內容放入資料系結中。就必須在專案資料系結中撰寫一些額外的代碼行,或者在標記中難以閱讀凌亂的運算式而言,這有點被淘汰了?(我愿意為此拋硬幣)。
但是,專案資料系結然后變成這樣:
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item
| e.Item.ItemType == ListItemType.AlternatingItem)
{
ImageButton btnImg = (ImageButton)e.Item.FindControl("userImage");
DataRowView rRow = (DataRowView)e.Item.DataItem;
if (DBNull.Value.Equals(rRow["image"]))
btnImg.ImageUrl = "~/Content/ckdelete.png";
else
btnImg.ImageUrl = @"data:image/png;base64,"
Convert.ToBase64String((byte[])rRow["image"]);
}
}
請注意我們如何能夠獲得資料系結行值。該資料集僅在資料系結事件期間持續存在 - 完成后,它超出范圍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/345923.html
