我只有一些网格视图推送备件宽度图像。 在我的gridview中,我有这个itemtemplate
<asp:TemplateField HeaderText="Image">
<ItemTemplate>
<asp:Image ID="Image1" Height="100px" Width="100px" ImageUrl='<%#
"data:Image/png;base64,"+ Convert.ToBase64String((byte[])Eval("Img")) %>'
runat="server" />
</ItemTemplate>
</asp:TemplateField>
当数据库中没有图像时,这会给我一个错误&#34; System.dbnull。我尝试了很多东西,但我没有&#39;想在这里发帖。他们没有&#39;我不喜欢将默认图像插入每一行的想法。我也希望这个尺寸只是必要的。我该如何解决这个问题?
答案 0 :(得分:1)
您可以使用Eval(“Image”) is DBNull
来判断要输出的内容
我没有长时间使用webform,但应该工作
<asp:TemplateField HeaderText="Image">
<ItemTemplate>
<asp:Image
Visible='<%#Eval("Img")!=DBNull.Value%>' // hide the image if no data
ID="Image1" Height="100px" Width="100px"
ImageUrl='<%#Eval("Img")!=DBNull.Value ? "data:Image/png;base64,"+ Convert.ToBase64String((byte[])Eval("Img")) : string.Empty %>'
runat="server" />
</ItemTemplate>
</asp:TemplateField>
答案 1 :(得分:0)
好像你正在渲染有几千字节大小的图像。如果是这样,则不应将图像渲染为base64编码的字符串。
主要原因是 浏览器无法缓存图像,如果它们作为base64编码字符串嵌入页面 。因此,每次用户查看相同的图像时,浏览器都必须重新加载每个图像以及页面内容。
理想情况下,您应该使用图像处理程序来渲染这些图像。一开始似乎很多,但相信我它会大大证明后续页面加载的速度。
例如,
<asp:TemplateField HeaderText="Image">
<ItemTemplate>
<asp:Image ID="Image1"
ImageUrl='<%# "~/ImageHandler.ashx?id=" + Eval("Id") %>'
runat="server" />
</ItemTemplate>
</asp:TemplateField>
public class ImageHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var id = context.Request.QueryString["id"];
// Retrieve the image data as byte array from database based on the id
context.Response.BinaryWrite(YourImageByte);
}
public bool IsReusable { get{ return false; }}
}
答案 2 :(得分:0)
@Ray H的解决方案最终为我工作,但是,由于我们的后台代码在VB中而不是C#中,因此需要不同的标记!希望对其他人有所帮助,这是我为VB用户设计的Ray解决方案的转换-有点冗长:
<asp:TemplateField HeaderText="Image" >
<ItemTemplate>
<asp:Image ID="Image2" runat="server" Width="100px" Height="42px" ImageUrl='<%#If(Eval("Image") IsNot DBNull.Value, "data:Image/png;base64," + Convert.ToBase64String(Eval("Image")), String.Empty) %>' />
</ItemTemplate>
<ItemStyle Font-Names="9px" HorizontalAlign="Left" />
</asp:TemplateField>
关键部分是这样:
ImageUrl='<%#If(Eval("Image") IsNot DBNull.Value, "data:Image/png;base64," + Convert.ToBase64String(Eval("Image")), String.Empty) %>' />