I tested your code and it renders the image properly. The worst case, you can use DataList.ItemDataBound Event to bind the data.
ASPX
<asp:DataList ID="DataList1" runat="server"
OnItemDataBound="DataList1_ItemDataBound">
<ItemTemplate>
<asp:HyperLink ID="ht" runat="server">
<asp:Image ID="img" runat="server" CssClass="img-responsive"/>
</asp:HyperLink>
</ItemTemplate>
</asp:DataList>
Code Behind
public class MyClass
{
public string Url { get; set; }
public string Image { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataList1.DataSource = new List<MyClass>
{
new MyClass
{
Url = "http://www.google.com",
Image = "https://www.google.com/images/srpr/logo11w.png"
},
new MyClass
{
Url = "http://www.msn.com",
Image = "http://col.stb00.s-msn.com/i/80/53CAC6A10B6248682CF221B24A92.gif"
},
};
DataList1.DataBind();
}
}
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
var item = e.Item.DataItem as MyClass;
var ht = e.Item.FindControl("ht") as HyperLink;
ht.NavigateUrl = item.Url;
var img = e.Item.FindControl("img") as Image;
img.ImageUrl = item.Image;
}
}
If you use DataSet or DataTable, you need to cast DataItem to DataRowView. var dr = e.Item.DataItem as DataRowView;
. look at this example.