Nello sviluppo di un custom control può essere necessario dover ricorrere a Javascript per sfruttare le potenzialità dei browser lavorando con DOM, XMLHttp e in generale con l'object model.
Per raggiungere questo scopo, ASP.NET 2.0 mette a disposizione la classe ClientScriptManager, raggiungibile attraverso la proprietà Page.ClientScript, che permette di includere codice Javascript nella pagina. Qualora questo codice risulti di grandi dimensione, spesso conviene riporlo in un file apposito da richiamare nella pagina con il tag script.
In un custom Control, però, distribuire il file copiandolo nelle applicazioni web non è comodo ed è per questo che è preferibile inserire come risorsa il file, all'interno dell'assembly prodotto dalla compilazione. Per farlo occorre andare nelle proprietà di Visual Studio del file desiderato e alla voce "Build action" selezionare "Embedded Resource".
Ponendo di avere un controllo di nome PopupControl, che offre un collegamento ad una pagina tramite popup, si crea un file PopupScript.js e lo si include come risorsa. Successivamente occorre informare il motore di ASP.NET con l'attributo WebResourceAttribute che per una certa risorsa è associato uno specifico content type:
[assembly: WebResource("MyWebControl.PopupScript.js", "application/x-javascript")]
L'attributo si applica a livello di assembly e quindi lo si può riporre in una qualsiasi classe, oppure direttamente all'interno del file AssemblyInfo.
All'interno del controllo, non occorre far altro che includere lo script nella pagina. A tale scopo, ASP.NET 2.0 ha un handler di nome WebResource.axd che restituisce le risorse presenti negli assembly. Il metodo RegisterClientScriptResource di ClientScriptManager crea un tag script che punta all'handler per farsi restituire il file di Javascript, solitamente va richiamato all'interno del PreRender del controllo:
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); this.Page.ClientScript.RegisterClientScriptResource(typeof(PopupControl), "MyWebControl.PopupScript.js"); }
Il metodo accetta il tipo dal quale risale all'assembly nella quale ricercare poi la risorsa. Il nome della risorsa è determinato poi dal [namespace di default].[nome file]. Di seguito l'HTML generato dal metodo:
<script src="/ScriptResource/WebResource.axd?d=6TWeK3IgLFy6Fio6hruxnH8uozWba9T_8EB0Im_n2zCFWsVYL10G7TIPM1adjzmx0&t=633295342761090000" type="text/javascript"></script>
Come ultima nota va segnalato che l'handler delle risorse restituisce i file facendo cache sia lato server che client, mentre lavora senza cache se l'applicazione web è in modalità di debug.
Commenti
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
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub