Un custom control per recuperare da web.config il formato dell'URL di ImageField

di Marco Leoncini, in ASP.NET 2.0, Custom Control, GridView,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi