Attributi e Validazione del querystrig

di Stefano Mostarda

Ultimamente sto lavorando parecchio con gli attributi perchè li trovo estremamente più comodi di un'interfaccia o di una proprietà.

Detto questo, una delle esigenze più comuni è quella di validare il querystring per verificare che i dati siano tutti presenti e corretti. Scrivere ogni volta il codice di controllo mi risulta tedioso e anche affidarmi ad un file di configurazione e ad un metodo di helper per generalizzare il compito mi risulta poco efficace all'atto pratico perchè per capire la validazione devo consultare un secondo file. Alla fine gli attributi mi sono tornati utili anche qui: si decora la classe della pagina con un attributo custom (ad esempio RequiredQueryStringField) passando in input il nome del campo del querystring da validare. Nell'evento Page_Load chiamo un metodo di helper che scorre gli attributi della classe e mi valida il querystring. Se poi la chiamata la metto in una classe base da cui tutte le pagine derivano ecco che il codice si annulla e ci si deve preoccupare solo di inserire gli atributi.
Risultato: Querystring validato, codice pulito e leggibile, niente file esterni.

In realtà ho pensato anche un HttpModule che scatena la validazione prima dell'esecuzione della pagina, ma poichè voglio permettere anche una validazione custom, un po' alla CustomValidator per capirci, devo ancora pensarci bene.

[RequiredQueryStringField("id")]
public class MyPage : Page{
  private void Page_Load(object sender, EventArgs e){
            Helper.Validate(this)
  }
}


con questo snippet mi assicuro che il valore della chiave "id" nel querystring sia presente. Comodo no ;).

P.S. Appena avrò fatto chiarezza sull'HttpModule vedrete tutto pubblicato sul lab.

Stay tuned...

Commenti
Cradle scrive:
Attributi e Validazione del querystrig

Carine sia l'idea di Stefano che i PageMethods segnalati da Marco.

Per quanto riguarda il commento di AZ, un giorno si disse "favor object composition over inheritance", quindi personalmente preferisco di più l'idea di un oggetto esterno che intercetti l'evento Load della pagina a cui appartiene ed effettui la validazione per attributi.

My two cents
04/09/2006 ore 9.44
andrewz scrive:
Attributi e Validazione del querystrig

Ciao Stefano,
perché non verifichi gli attributi della pagina direttamente da una classe Page personalizzata e adatta a questo scopo? In questo modo sarà il codice della classe page a fare il tutto:

public class ValidatePage:System.Web.UI.Page
{
    public ValidatePage():base()
    {
        System.Reflection.MemberInfo info = this.GetType();
        object[] attributi = info.GetCustomAttributes(
            typeof(Validate), // Classe attributo per la validazione
            true);
        foreach (Validate sec in attributi)
        {
            if (sec.Parameter="...")
            {}
        }
    }
}


Oppure non o capito completamente quello che vuoi ottenere

Ciao
04/09/2006 ore 7.41 | 4 risposte
nostromo scrive:
04/09/2006 ore 9.24
»»»» SM15455 scrive:
Re: Attributi e Validazione del querystrig

preferisco avere un codice che sia esterno alla classe come dice Cradle. Mi sembra più pulito. Poi con l'HttpModule, sempre se lo finisco, elimino proprio il codice e lascio solo gli attributi che è ancora meglio.
04/09/2006 ore 11.41 | 1 risposta
andrewz scrive:
Re: Attributi e Validazione del querystrig

SM15455 <SM15455> ha scritto:
preferisco avere un codice che sia esterno alla classe come dice Cradle.

Be', per essere fuori, è fuori, visto che è in una classe personalizzata separata per la pagina.
Mi sembra più pulito. Poi con l'HttpModule, sempre se lo finisco, elimino proprio il codice e lascio solo gli attributi che è ancora meglio.

Aspetto novità nel lab!
Ciao
04/09/2006 ore 13.39 | 1 risposta
»»»» SM15455 scrive:
Re: Attributi e Validazione del querystrig

Le novità arriveranno prima di quanto credi
04/09/2006 ore 14.32

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

Nella stessa categoria
I più letti del mese
TagCloud
BLOG INFO
  • 130 post, 93 commenti, 20 trackback
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom
IN EVIDENZA