ciao,
nel tuo codice non si vede ma immagino che tu abbia valorizzato la proprietà ImageUrl prima di leggere il valore di Height.
Se è così, penso di capire la situazione: il fatto che l'altezza sia 0, nonostante tu abbia indicato il percorso di un'immagine, può sembrare alquanto strano. In realtà è normale perché il controllo Image non va ad aprire fisicamente l'immagine e perciò non può sapere quale sia la sua altezza.
Height è semplicemente un valore che verrà renderizzato dal controllo Image come
style="height: ...", quindi è totalmente opzionale e il suo unico scopo è quello di permetterti di impostare un'altezza arbitraria, che può essere differente da quella dell'immagine.
Pensa al caso in cui tu voglia mostrare un'immagine come miniatura. A quel punto non ti interessa quale sia la sua dimensione originale ma vuoi che sia mostrata a video con una altezza fissa di 100px. Dunque faresti:
ie.Height = new Unit(100, UnitType.Pixel);
Se tu invece vuoi proprio ottenere l'altezza dell'immagine, devi prima caricarla in memoria usando l'altra classe Image, quella che si trova nel namespace System.Drawing.
//devo ottenere il percorso fisico del file se voglio che Image possa aprirlo
var percorsoFisico = Server.MapPath(ie.ImageUrl);
//carico l'Image in memoria e ne leggo la sua proprietà Height
using (var img = System.Drawing.Image.FromFile(percorsoFisico))
{
Label6.Text = img.Height.ToString();
}
Tieni presente che, se le tue immagini sono molto grandi, sarebbe meglio non caricare l'intero file in memoria ma affidarsi ad un pezzo di codice che sia in grado di determinare le dimensioni leggendo giusto pochi bytes dall'intestazione del file. Prova questo, che è leggermente più complicato ma ti può dare prestazioni migliori.
http://stackoverflow.com/questions/111345/getting-image-dimensions-without-reading-the-entire-fileInfine, se per te non è fondamentale leggere le dimensioni lato server, puoi anche rimandare questo compito al client, che quell'immagine dovrà aprirla.
var ie = new Image();
//logo di google
ie.ImageUrl = "https://www.google.it/images/srpr/logo4w.png";
//gestisco l'evento client onload per leggere l'altezza ed inserirla in una span
ie.Attributes["onload"] = "javascript:this.nextSibling.innerHTML=this.height";
Page.Form.Controls.Add(ie);
//questa è la span che aggiungo subito dopo il controllo Image. Sarà il suo "nextSibling"
var span = new HtmlGenericControl("span");
Page.Form.Controls.Add(span);
ciao
Modificato da BrightSoul il 14 luglio 2013 14.37 -