in .Net Framework, ASP.NET, ASP.NET MVC, IIS, Microsoft .Net, Visual Studio

Caricare un file javascript embedded da una libreria in un progetto ASP.NET MVC

Appunto qui per ricordarmene in futuro visto che ultimamente dimentico tutto: ho realizzato una libreria di classi in cui, oltre ad oggetti C#, sono presenti diversi file javascript il cui contenuto è necessario perché le classi possano funzionare correttamente. Per caricarli all’interno del progetto principale è necessario:

  1. selezionare il file javascript presente nel progetto libreria;
  2. dal menu contestuale (click destro del mouse), selezionare la voce Proprietà;
  3. nella finestra che compare modificare Build Action: Embedded Resource.
  4. nel file AssemblyInfo.cs della del progetto libreria aggiungere una nuova riga di codice:
[assembly:System.Web.UI.WebResource(
  "YourNamespace.Resource.js", 
  "application/x-javascript"
)]

A questo punto possiamo caricare il file javascript utilizzando ClientScript.GetWebResourceUrl(Type, resourceName).
Utilizzando ASP.NET MVC è necessario un ulteriore passaggio perché tutto funzioni correttamente: realizzare una classe che ci consenta di reperire direttamente l’URL del file javascript da poter includere nella nostra pagina web:

public static class ResLocator
{
  private const string UrlLocatorMethodName = "GetWebResourceUrlInternal";
  public static string Resolve(Type assemblyObjectType, string resourceName) 
  {
    MethodInfo resourceLocatorMethod = assemblyObjectType.GetMethod(UrlLocatorMethodName, 
    BindingFlags.NonPublic | BindingFlags.Static);
    string url = string.Format("/{0}", resourceLocatorMethod.Invoke(
      null,
      new object[] { Assembly.GetAssembly(assemblyObjectType), resourcePath, false })
    );
    return url;
  }
}

Il metodo Resolve accetta in input un Type che deve necessariamente riferirsi ad un tipo di oggetto contenuto nel progetto libreria e resourceName, cioè il nome della risorsa da includere. Successivamente, referenziando il namespace in cui è contenuto l’helper all’interno della nostra MasterPage, è possibile includere lo script di riferimento in questo modo:

<script 
  type="text/javascript" 
  src="@ResLocator.Resolve(typeof(SampleAssemblyObject), "YourNamespace.Resource.js)" />

Completati questi passaggi è possibile avviare l’app MVC e ottenere un URL simile al seguente:

/WebResource.axd?d=HWyLh7g77XD...Z81&t=634788092174760080

Scrivi un commento

Commento