2011-01-08 3 views
1

У меня есть список System.Drawing.Image. Я хочу обновить элемент управления asp.net Image в событии Page_Load с последним изображением из этого списка.asp.net управление изображениями - как поместить в него изображение

Я могу найти только объекты, такие как ImageURL. Не могу ли я просто сделать что-то вроде

ImageControl1.referenceToSomeImageObjectWhichWillBeDisplayed=myImageObjectFromTheList 

есть ли такое свойство на изображении управления?

ответ

1

Нет, нет.

Чтобы сделать то, что вы хотите, вы можете написать HTTP Handler, который возвращает изображение и указывает на ImageUrl.

Here является одним из примеров такого обработчика.

2

Oded правильный, я бы использовал обработчик для возврата изображения. Пример ниже:

Обработчик Класс:

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

Затем я добавил общий метод страницы, чтобы использовать обработчик:

 /// <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; 
     } 
    } 

И, наконец, чтобы использовать в ASPX:

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

или если вы хотите использовать в Code Behind:

imgPicture.ImageUrl = this.GetImageHandlerQuery(this.CurrentPiecePicture.ImageOriginalPath); 

Очевидно, что вам не нужен метод страницы, и вы можете вызвать обработчик напрямую, но может быть полезно ввести класс базовой страницы.

Смежные вопросы