如何在asp.net中处理/删除图像按钮的损坏图像图标?

时间:2013-01-02 05:28:39

标签: c# asp.net

如果图像坏了我想添加替代图像,我们也可以删除损坏的图像图标吗?这是我的代码:

<asp:ImageButton 
    AlternateText = " " 
    onerror = "imgError(this)" 
    ID = "ImageButton111" 
    runat="server" 
    Width = "140" 
    Height = "140" 
    CommandName = "image1" 
    CssClass = "imagetest" 
    CommandArgument = "image"  
    CausesValidation = "false" 
    ImageUrl='<%# "loadImage.ashx?RollNo=" + Eval("RollNO")%>' 
/>



    function imgError(image) {
    image.onerror = "";
    image.src = "~/images/no-hit.gif";
    return true;
}

3 个答案:

答案 0 :(得分:1)

我认为AlternateText本身是一个内置功能,用于在无法正确加载图像的情况下设置文本代替图像。

或者,如果您想要替代图像,请使用:

<img src="image.gif" onerror="changeImage('alternate_image.gif')">

并在javascript函数中设置替代图像:

function changeImage(altImage){
$(this).attr('src',altImage.toString());
}

希望有所帮助:)

答案 1 :(得分:0)

我将摆脱onerror事件并在CodeBehind中实现它。这样,如果禁用JavaScript,您仍将获得所需的结果。我使用了HttpWebRequest。它只检查HEAD,因此它实际上并没有下载文件,它只是检查图像是否可访问。

   HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(ImageButton1.ImageUrl);
    request.Method = "HEAD";

    try
    {
        request.GetResponse();
    }
    catch
    {

        ImageButton1.ImageUrl = "yournewimage.jpg";
    }

答案 2 :(得分:0)

您可以更改这样的数据列表标记,即创建图像的位置

<%
    string filePath = "loadImage.ashx?RollNo=" + Eval("RollNo");
    if (IsImageValid(filePath))
    {
    %>
      <asp:ImageButton AlternateText=" " ID="ImageButton111" runat="server"
          Width="140" Height="140" CommandName="image1" CssClass="imagetest" CommandArgument = "image"
    CausesValidation="false" ImageUrl='<%# "loadImage.ashx?RollNo=" + Eval("RollNO")%>' />
   <%}
      else
   {%>
     <asp:ImageButton AlternateText=" " ID="ImageButton1" runat="server"
        Width="140" Height="140" CommandName="image1" CssClass="imagetest" CommandArgument="image"
         CausesValidation="false" ImageUrl="~/images/no-hit.gif" />
  <%} %>

现在您将要做的是,如果图像被破坏,则创建不同的图像

可以像这样定义IsImageValid函数

public bool IsImageValid(string filename)
{
    try
    {
        System.Drawing.Image newImage = System.Drawing.Image.FromFile(filename);
    }
    catch (OutOfMemoryException ex)
    {
        // Image.FromFile will throw this if file is invalid.
        // Don't ask me why.
        return false;
    }
    return true;
}

这一切都可以在OnItemDataBound事件中完成,即使更容易。