Claudio Masieri

SOA, Windows Communication Foundation (WCF), ASP.NET e le Architetture Distribuite

Web controls e caricamento dinamico delle risorse esterne

Innanzitutto questo è il mio primo post sul mio primo blog e scusate se sono un po impacciato.

Ho appena terminato uno sviluppo per hobby su un webcontrol. Da quando ho iniziato a sviluppare con HTML ASP & C. ho sempre trovato difficoltà nell'utilizzo di javascript. Per quanto sia da un lato semplicistico, dall'altro è estremamente complicato in quanto ha sempre avuto difficoltà nella portabilità da un browser all'altro (almeno quello che scrivevo io).
La cosa che ho apprezzato per prima di ASP.NET è poter fare a meno di javascript.
ASP.NET in realtà usa javascript nascondendolo all'utente, utilizzandolo per lo stretto necessario (postback, validazioni ...). La potenza di javascript talvolta però mi sorprende.
Di recente vedevo tra i progetti di sourceforge il controllo http://www.activewidgets.com/ che devo dire è fatto in maniera splendida.
Sebbene sembri un activex è fatto interamente in javascript (e per questo mi tolgo il cappello), il problema che da asp.net bisogna un po impegnarsi ogni qualvolta che si intende utilizzarlo.

L'ideale sarebbe stato avere una grid che esponga la stessa interfaccia della datagrid e che quindi con l'impostazione della datasource con un databind avessi tutto pronto.

La sfida è ottima e allora mi metto a lavorarci. In primis decido di ereditare mia classe dalla classe Datagrid, poi mi accorgo che non avrei finito entro l'anno con tutte le proprietà da agganciare e allora procedo con un nuovo WebControl implementando le interfacce INamingContainer e IPostBackEventHandler.

Il mio grosso gruccio non era realizzare il controllo ma evitare che un utente che usa tale controllo dovesse portarsi dietro i numerosi files css e js.
Una idea mi travolse. Perchè non embeddare tutti i filed js e css "statici" internamente al mio controllo e poi richiamarlo dalla reflection? Cosi ho provveduto a creare un HTTPModule che interrogato dalla request provvedesse a recuperare le risorse interne all'assemby.

In questa maniera il webcontrol può richiedere immagini js e css ad un url fittizzio generando link a risorse tipo Masieri.Web.Control.aspx?res=gird.js e cosi agganciare le risorse esterne.

Unica precauzione alla richiesta di caricamento del controllo ho dovuto controllare se l'HTTPModule esisteva e in caso negativo emettere un javascript in cui avviso lo sviluppatore di ricordarsi di aggiungere la dichiarazione dell'HttpModule al web.config.

Ecco il link con un esempio http://www.noise.it/activegrid/, penso che provvedero' ad aprire un apposito progetto su SourceForge dove depositare i sorgenti

Posted: gen 15 2005, 02.47 by claudiom
Filed under: