c#
  • asp.net
  • 2017-09-23 39 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; }} 
    } 
    
    相關問題