Peppe Pace

Registrare codice javascript in controlli da utilizzare con e senza ASP.NET AJAX

leave a comment »

Avete realizzato dei webcontrol o usercontrol che fanno uso di javascript e volete utilizzarli sia con che senza la tecnologia ASP.NET AJAX. Istruzioni come queste:

....
Page.ClientScript.RegisterStartupScript(this.GetType(), "msg", "alert('Messaggio');", true);
....

non funzioneranno nel caso in cui il controllo sia in un contesto AJAX enabled, in quanto tutti i codici javascript vanno registrati tramite lo ScriptManager. Viceversa se ottimizzate il codice per usare gli oggetti con AJAX non potrete usarli in ambienti senza questa tecnologia. Che fare dunque per creare controlli universali?? Io, grazie al webcast dell’11/10/2207 ASP.NET 2.0 AJAX – Tips & Tricks di Andrea Dottor, sono giunto ad una soluzione che ritengo abbastanza buona. In una slide relativa al webcast è illustrato come richiamare lo ScriptManager o il ClientScript tramite reflection in base alla presenza o meno dell’assembly System.Web.Extension con questo codice:

MethodInfo RegisterClientScriptResourceMethod;
Type scriptManagerType = Type.GetType("System.Web.UI.ScriptManager, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", false);
// se diverso da null significa che è presente l’assembly System.Web.Extension nell’applicazione
if (scriptManagerType != null)
     RegisterClientScriptResourceMethod = scriptManagerType.GetMethod("RegisterClientScriptResource", new Type[] { typeof(Control), typeof(Type),typeof(string) });

if (RegisterClientScriptResourceMethod != null)
{
     // con ASP.NET AJAX, utilizzo ScriptManager
     RegisterClientScriptResourceMethod.Invoke(null, new object[] { control, type, resourceName });
}
else
{
     // senza ASP.NET AJAX,utilizzo ClientScriptManager
     control.Page.ClientScript.RegisterClientScriptResource(type, resourceName);
}

Questo codice è valido solo per il metodo RegisterClientScriptResource dunque perchè non generalizzare ulteriormente?? Rispondendo a questa domanda viene fuori questa classe. Usando i metodi statici in essa implementati è possibile includere codice javascript nei vostri controlli senza preoccuparsi dell’ambiente (con o senza AJAX) in cui vengono utilizzati. Non tutti i metodi sono implementati, lascio a voi ulteriori implementazioni e mi raccomando se la migliorate fatemelo sapere.

Annunci

Written by Peppe Pace

martedì 4 dicembre 2007 a 1:00

Pubblicato su .NET, Sviluppo

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: