>non mi sono chiare 2 cose: come accodo al buffer di output e
>da dove salta fuori la variabile ID... cmq te l'ho detto io devo
>bindare un'immagine su ImageUrl...
>
Ti faccio un piccolo esempio. Supponiamo che tu abbia su database una tabella Articoli così composta:
- IDArticolo
- FotoArticolo
La prima colonna è l'identificativo numerico, mentre la seconda conterrà l'array di byte che rappresenta l'immagine.
Per la visualizzazione creiamo una pagina con un datalist che conterrà i dati degli articoli.
Nell'ItemTemplate del datalist inserisci un controllo immagine che prende dal datasource l'id dell'articolo da visualizzare:
La proprietà ImageUrl punta alla pagina di visualizzazione dell'immagine.
Il codice della pagina ImmagineArticolo.aspx sarà il seguente:
private int IDArticolo
{
get
{
string str = Request.QueryString["ID"];
if (String.IsNullOrEmpty(str))
return -1;
else
return Convert.ToInt32(str);
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (this.IDArticolo != -1)
{
//Carica i dati da db (la funzione getArticolo ritorna un datarow con i dati dell'articolo)
DataRow dr = GetArticoloFromDB(this.IDArticolo);
byte[] arrImage = (byte[])dr["FotoArticolo"];
//Ritorna i dati nello stream di output
Response.Clear();
Response.ContentType = "Image/JPEG";
Response.BinaryWrite(arrImage);
Response.End();
}
}
Così facendo eviti di salvare i dati sul disco (è comunque un'operazione onerosa in termini di performance) e puoi sfruttare anche i meccanismi di caching di asp.net per evitare che tutte le volte i dati vengano caricati da database.
Il codice seguente (da inserire nella pagina aspx) ti consente ad esempio di impostare una cache di 60 secondi. Questa cache è impostata per ogni richiesta valutando però il valore del parametro ID del querystring.
<%@ OutputCache Duration="60" VaryByParam="ID" %>
A questo link trovi alcune informazioni sull'output caching (in inglese): http://msdn2.microsoft.com/en-us/library/ms972362.aspx
Se ti serve qualche chiarimento chiedi pure
Marco