c#
  • asp.net
  • 2017-09-23 141 views 0 likes 
    0

    我只有一些gridview推送spareparts宽度图像。 在我的GridView我有这样的ItemTemplate如何在System.DBnull时不进行评估?

    <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> 
    

    这让我一个错误“System.dbnull时,有数据库中没有图像。我试图大街的东西很多,但我不”要张贴在这里。他们不工作我不喜欢这个想法插入一个默认图像到每一行。我也希望大小只是什么必要。我如何解决这个问题?

    +0

    理想情况下,我们不应该呈现base64编码图像,除非它是一个非常小的图像。否则,页面尺寸会非常大,浏览器无法缓存图像。 – Win

    +0

    改为使用什么? – TheNewone

    回答

    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> 
    
    +0

    'Eval(“Image”)!= DBNull.Value' – ASpirin

    +0

    @ASpirin哈哈,我很笨,是的,但是你的更好 –

    +0

    这给了我另一个错误。 “像Eval(),XPath()和Bind()这样的数据绑定方法只能在这个例子中使用......” – TheNewone

    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; }} 
    } 
    
    相关问题