2011-01-08 15 views
1

Ich habe eine Liste von System.Drawing.Image. Ich möchte meine asp.net Image Kontrolle im Page_Load Ereignis mit dem letzten Bild von dieser Liste aktualisieren.asp.net Bildkontrolle - wie man ein Bild darin setzt

Ich kann nur Eigenschaften wie ImageURL finden. Kann ich nicht einfach etwas wie

ImageControl1.referenceToSomeImageObjectWhichWillBeDisplayed=myImageObjectFromTheList 

Gibt es eine solche Eigenschaft auf dem Image-Steuerelement?

Antwort

1

Nein, gibt es nicht.

Um zu tun, was Sie wollen, können Sie eine HTTP Handler schreiben, die das Bild zurückgibt und die ImageUrl darauf zeigen.

Here ist ein Beispiel für einen solchen Handler.

2

Oded ist korrekt, ich würde einen Handler verwenden, um das Bild zurückzugeben. Beispiel unten:

Handler Klasse:

public class ImageHandler : IHttpHandler 
{ 

public void ProcessRequest(HttpContext context) 
{ 
    try 
    { 
     String Filename = context.Request.QueryString[ "FileName" ]; 

     if (!String.IsNullOrEmpty(Filename)) 
     { 
      // Read the file and convert it to Byte Array 
      string filename = context.Request.QueryString[ "FileName" ]; 
      string contenttype = "image/" + Path.GetExtension(Filename.Replace(".", "")); 
      FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); 
      BinaryReader br = new BinaryReader(fs); 
      Byte[] bytes = br.ReadBytes((Int32) fs.Length); 
      br.Close(); 
      fs.Close(); 

      //Write the file to response Stream 
      context.Response.Buffer = true; 
      context.Response.Charset = ""; 
      context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
      context.Response.ContentType = contenttype; 
      context.Response.AddHeader("content-disposition", "attachment;filename=" + filename); 
      context.Response.BinaryWrite(bytes); 
      context.Response.Flush(); 
      context.Response.End(); 
     } 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
} 

/// <summary> 
/// Gets whether the handler is reusable 
/// </summary> 
public bool IsReusable 
{ 
    get { return true; } 
} 
} 

Ich habe dann eine gemeinsame Seite Methode den Handler zu verwenden:

 /// <summary> 
    /// Gets the image handler query 
    /// </summary> 
    /// <param name="ImagePath">The path to the image</param> 
    /// <returns>Image Handler Query</returns> 
    protected string GetImageHandlerQuery(string ImagePath) 
    { 
     try 
     { 
      if (ImagePath != string.Empty) 
      { 
       string Query = String.Format("..\\Handlers\\ImageHandler.ashx?Filename={0}", ImagePath); 

       return Query; 
      } 
      else 
      { 
       return "../App_Themes/Dark/Images/NullImage.gif"; 
      } 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
    } 

Und schließlich in der ASPX zu verwenden:

<asp:ImageButton ID="btnThumbnail" runat="server" CommandName="SELECT" src='<%# GetImageHandlerQuery((string)Eval("ImageThumbnail200Path")) %>' 
                      ToolTip='<%#(string) Eval("ToolTip") %>' Style="max-width: 200px; max-height: 200px" /> 

oder wenn Sie in Code hinter verwenden wollten:

Offensichtlich brauchen Sie nicht die Seitenmethode und Sie können den Handler direkt aufrufen, aber es könnte nützlich sein, Ihre Basisseitenklasse einzutragen.

Verwandte Themen