I control DetailsView e GridView utilizzano l'ImageField per visualizzare un'immagine il cui percorso è recuperato dal campo della fonte dati specificato attraverso la proprietà DataImageUrlField.
Per aumentare la portabilità di un'applicazione web, spesso questo campo non contiene l'URL completo, ma solo il nome del file, ed il percorso completo è ottenuto utilizzando la stringa di formattazione specificata mediante la proprietà DataImageUrlFormatString ed il valore del campo impostato dalla proprietà DataImageUrlField .
La comodità dell'ImageField può essere limitata o annullata se cambiando il percorso delle immagini dovesse necessario correggere in più pagine la proprietà DataImageUrlFormatString.
Con poche e semplici modifiche è possibile memorizzare nella sezione AppSetting del web.config la stringa utilizzala dall'ImageField per formattare l'URL in modo da centralizzarne la gestione e manutenzione, costruendo un controllo custom.
namespace CustomControl { public class BasePathImageField : ImageField { } public string AppSettingKey { get {return (string)ViewState["_appSettingKey"]; } set {ViewState["_appSettingKey"] = value;} } }
Abbiamo aggiunto la proprietà AppSettingKey per specificare la chiave da leggere nel web.config, non ci reste che aggiungere un ovveride della proprietà DataImageUrlFormatString, recuperando la stringa di formattazione:
public override string DataImageUrlFormatString { get { string _urlFormat = base.DataImageUrlFormatString; if (string.IsNullOrEmpty(_urlFormat)) { try { _urlFormat = WebConfigurationManager.AppSettings[AppSettingKey]; if (_urlFormat == null) { Page.Trace.Warn("BasePathImageField", "Impossibile recuperare le informazioni dal web.config"); _urlFormat = string.Empty; } } catch(Exception ex) { Page.Trace.Warn("BasePathImageField",ex.Message); } } return _urlFormat; } set { base.DataImageUrlFormatString = value; } }
Aggiungiamo nella sezione appSettings nel web.config la seguente stringa:
<add key="ImageUrlFormat" value="~/Photo/{0}"/> Infine inseriamo la nuova classe nella cartella App_Code e registriamo il custom control nella pagina, utilizzandolo nel GridView o DetailsView: [code lang="aspx"]<%@ Register Namespace="CustomControl" TagPrefix="CustomControl" %> <asp:GridView runat="server"... > <Columns> <CustomControl:BasePathImageField DataImageUrlField="Name" HeaderText="Immagine" NullDisplayText="Nessuna immagine" AppSettingKey="ImageUrlFormat" /> </Columns> </asp:GridView>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Implementare il throttling in ASP.NET Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Short-circuiting della Pipeline in ASP.NET Core
Load test di ASP.NET Core con k6
Cache policy su route groups di Minimal API in ASP.NET Core 7
Personalizzare l'errore del rate limiting middleware in ASP.NET Core