Includere in un file di risorse ed utilizzare Javascript in un custom control per ASP.NET 2.0

di Cristian Civera, in ASP.NET 2.0, Custom Control,

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

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

Nessuna risorsa collegata

I più letti di oggi