novembre
2009
Lorsque l’on développe une librairie de composants ASP.NET, il se pose toujours le problème de “comment je fait pour déployer l’image associée à ce control” ?
Jusqu’à la version 2.0 d’ASP.NET, les réponses été … comment le dire … “exotique”. Cela allait du handler IIS pour extraire les ressources “à la main”, jusqu’au fatidique “ils ont qu’à se débrouiller”
A partir de la version 2.0 un ensemble d’API ont été mis en place, permettant d’extraire les ressources de façon propre.
Pour utiliser les utiliser c’est pas compliqué :
Coté librairie de composants :
1ère étape : Ajouter la ressource dans l’assembly en tant que “Ressource incorporée”. Pour cela il suffit d’ajouter la ressource au projet de manière normale et de modifier la propriété “Action de génération”.
2ème étape : Déclarer la ressource dans l’assembly. Cela se fait grâce à l’attribut d’assembly “WebResource”. Cet attribut prend en paramètre le nom de la ressource et son type. Le nom de la ressource doit être le même que le nom de la ressource incorporée. Pour trouver le nom de la ressource incorporée, vous pouvez utiliser l’outil Reflector :
3ème étape (et la dernière) : Utiliser la ressource dans votre contrôle web :
1: public class ServerControl1 : CompositeControl
2: {
3: private Image image;
4:
5: protected override void CreateChildControls()
6: {
7: base.CreateChildControls();
8:
9: image = new Image();
10: image.ImageUrl = Page.ClientScript.GetWebResourceUrl(this.GetType(), "MyBusinessControls.Loading.png");
11: this.Controls.Add(image);
12: }
13: }
La partie intéressante est l’utilisation du ClientScriptManager pour enregistrer l’url de la ressource web.
Une fois le système mis en place les ressources seront obtenues à travers un handler défini par ASP.NET.
Il reste une dernière chose qui n’a pas été évoquée et qui un peu moins connue, c’est l’option “PerformSubstitution”. Cette option une fois positionnée à vrai permet de demander à ASP.NET de parser le contenu du fichier en ressource comme s’il faisait partie du pipe ASP.NET.
Ainsi vous pouvez définir des javascripts ou des css utilisant eux-même des ressources embarqués !
1: .control1
2: {
3: background-image:url(<%=WebResource("MyBusinessControls.Loading.png")%>);
4: }
Bref plus la peine d’écrire vos propres handler (voir même jetez les à la poubelle, vous finirez par y gagner pour obtenir des ressources partagées
Archives
- juillet 2012
- mars 2012
- février 2012
- novembre 2011
- octobre 2011
- mars 2011
- novembre 2010
- octobre 2010
- septembre 2010
- août 2010
- avril 2010
- février 2010
- janvier 2010
- novembre 2009
- octobre 2009
- septembre 2009
- juin 2009
- mai 2009
- avril 2009
- mars 2009
- février 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juin 2008
- mai 2008
- avril 2008
- février 2008
- mai 2007
- avril 2007
- mars 2007
- février 2007
- janvier 2007