c# Includere javascript

Avete necessità di includere del javascript in un controllo .net, ricavandolo da un file .js esterno? Ci sono molti modi per farlo ma alcuni hanno qualche problema nella gestione dei path all'interno del assembly delle risorse "incorporate".

Vi illustro una strada piuttosto funzionale, che vi permetterà di dormire sonni tranquilli.

La prima cosa che dovete fare è includere il file .js all'interno del vostro progetto e nelle proprietà del file settarlo come "embedded resource". Fatto questo il nome interno del vostro file sarà Namespace.NomeFile. Se avete delle sottocartelle, includetele nel path con il puntino.

Ora non vi resta che recuperare la risorsa via Stream, leggerla con uno stream reader, quindi includerla nella pagina con i metodi del ClientScriptManager. Ecco un semplice codice di esempio:

protected override void OnPreRender(EventArgs e)
{base.OnPreRender(e);
    string aName = Assembly.GetExecutingAssembly().GetName().Name;
    string slPathComplete = aName + "." + slPath;
    Stream x = Assembly.GetExecutingAssembly().GetManifestResourceStream(slPathComplete);
    StreamReader sr = new StreamReader(x);
    string slScript = sr.ReadToEnd();
    //registro lo script di classe base di Silverlight, ufficiale microsoft
    if (!Page.ClientScript.IsClientScriptBlockRegistered("slLibraryJS"))
    {
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "slLibraryJS", slScript, true);
    }
}

 

A questo punto il vostro script sarà inglobato all'interno dell'output del controllo.  Attenzione ad una cosa: inglobando il codice javascript all'interno dell'HTML, lo stesso diventa sensibile alla formattazione. Vi consiglio quindi (se avete del js compresso) di reformattarlo con qualche strumento, tipo questo di about.com.

*** *** ***

Avevo provato anche la soluzione di includere il js di risorsa, come collegamento js sfruttando il RegisterClientScriptResource, ma il collegamento al js mi da sempre 404, nonostante il nome risorse sia corretto e estratto direttamente dall'array dell'assembly:

string[] a =  Assembly.GetExecutingAssembly().GetManifestResourceNames();

e caricato in questo modo (dopo aver verificato in debug l'esistenza di a[0]):

Page.ClientScript.RegisterClientScriptResource(this.GetType(), a[0]);

Si accettano consigli!

Loading Facebook Comments ...

Un pensiero su “c# Includere javascript

  1. luke

    Ciao, intanto complimenti per il tuo blog, è facile da “leggere” ed è interessante.
    Noto che ti cimenti in quel bel (ma anche stressante) mestiere dello sviluppo software..
    Volevo consigliarti una nuova community italiana dedicata alla programmazione, che puoi trovare al sito http://www.codingace.it
    E’ un misto tra un forum ed un social network, ma che tiene conto delle risposte date agli utenti che postano problemi, con un sistema di punteggi.
    Piu’ sei bravo, piu’ la tua reputazione aumenta… a breve pubblicheremo anche annunci di lavoro, e le aziende stesse saranno libere di cercare e contattare gli utenti, non solo in base al loro curriculum ma anche secondo la “reputazione” raggiunta.
    Se hai tempo e voglia, facci un giro, posta qualche problema di programmazione, o risolvi quelli degli altri utenti.. e se ti piace magari, dedicaci un articolo ;)!

    Rispondi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *