Vous pouvez encoder le contenu de l'image en BASE64 directement dans l'attribut SRC, mais je crois que seul Firefox l'interprétera comme une image.
En général, je crée un HTTPHandler très léger pour servir les images :
using System;
using System.Web;
namespace Example
{
public class GetImage : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (context.Request.QueryString("id") != null)
{
Blob = GetBlobFromDataBase(id);
context.Response.Clear();
context.Response.ContentType = "image/pjpeg";
context.Response.BinaryWrite(Blob);
context.Response.End();
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
Vous pouvez y faire référence directement dans votre balise img :
<img src="GetImage.ashx?id=111"/>
Vous pouvez également créer un contrôle de serveur qui le fait pour vous :
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Example.WebControl
{
[ToolboxData("<{0}:DatabaseImage runat=server></{0}:DatabaseImage>")]
public class DatabaseImage : Control
{
public int DatabaseId
{
get
{
if (ViewState["DatabaseId" + this.ID] == null)
return 0;
else
return ViewState["DataBaseId"];
}
set
{
ViewState["DatabaseId" + this.ID] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write("<img src='getImage.ashx?id=" + this.DatabaseId + "'/>");
base.RenderContents(output);
}
}
}
Il pourrait être utilisé de la manière suivante
<cc:DatabaseImage id="db1" DatabaseId="123" runat="server/>
Et bien sûr, vous pouvez définir le databaseId dans le codebehind si nécessaire.