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...
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
tempo fa mi appassionai a questo sistema:
http://metasapiens.com/PageMethods/intro.aspx
ciao marco
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.
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
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Stampa
Download 


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
Continua »»» | Rispondi »»»