Bonjour,
Je cherche en ASP.net le meilleur moyen pour produire du HTML à partir d'objets. Je crois qu'aucune des solutions actuelle n'est vraiment satisfaisante :
- l'utilisation contrôles ASP.net ne permet pas d'avoir le contrôle sur le HTML produit. L'utilisation des feuilles de styles et la manipulation du DOM via JavaScript deviennent alors fastidieuses, la seule solution étant de compiler et exécuter le projet puis de regarder le code source généré. Bien sûr il y a les CSS friendly adapters, mais leur utilisation revient à redéfinir les méthodes de rendu des contrôles ce qui n'est vraiment pas productif. Je pense donc que les contrôles sont réservés à la production de pages simples ou de formulaire. J'ai par exemple récemment crée cette page. Je vois difficilement comment j'aurais pu la faire rien qu'avec des contrôle ASP.net...
- La deuxième solution consiste à construire le code html dans une variable de type string directement dans le code behind. Cela permet de résoudre pas mal de problèmes de la solution précédente. On peut produire exactement le code html que l'on veut et on a la possibilité de le construire avec toutes les instructions de logique du langage de programmation (conditions, boucle, appelle de fonction, récursivité,...). Je vois néanmoins de très gros inconvénients dans l'application de cette méthode :
- Il n'y a pas d'IntelliSense donc le code est plus long à écrire et souvent sujet à erreurs. Une balise non fermée ne sera par exemple détectée qu'à l'exécution.
- A l'origine le principe du code behind est là pour permettre une séparation entre la couche de logique et la couche de présentation. En mettant tout dans le code behind, on casse cette séparation et on perd la vue d'ensemble que l'on avait sur chacune de ces deux couches.
- Une troisième solution consiste à faire un mix des deux solutions précédentes. Écrire le html dans la page ASPX et utiliser au maximum les contrôles ASP.net. Quand ce n'est pas possible ou vraiment trop fastidieux, écrire le code html dans le code behind puis l'insérer dans la page ASPX à l'aide de la propriété InnerHtml. Je pense que c'est sûrement la solution la plus mauvaise. Le code HTML se trouve alors à deux endroits différents et l'on perd complètement la vue d'ensemble sur celui ci. L'étape de construction de la feuille CSS ou de manipulation du DOM devient un enfer...
- Enfin, la dernière solution que je vois et l'utilisation de feuilles XSLT. Mais comme celle-ci n'est pas applicable sur les objets, il faut auparavant les sérialiser au format XML. C'est ce que j'ai fais pour créer ma page. Je trouve très agréable de bénéficier d'instructions logiques au format xml (templates, boucle foreach, conditions,...). Cela permet de les mélanger avec du code XHTML. On bénéficie ainsi de l'IntelliSense, d'une parfaite séparation entre la logique objet et la présentation et d'un parfait contrôle sur le html tout en restant productif grâce à une logique qui permet de factoriser le code. Il y a cependant deux inconvénients majeurs :
- l'étape XML est non seulement inutile mais contre-productive. Il faut faire une sérialisation à chaque fois que les objets changent.
- cette méthode ne peut pas convenir dès que le client souhaite mettre à jour des données.
Pour conclure je dirais que l'idéal serait une sorte de feuille XSLT mais qui s'applique directement sur les objets. Va-t-il falloir attendre ASP.net 3.0… ?
Voilà, j'aimerais avoir votre avis sur la question. N'hésitez pas à me faire part de vos remarques et conseils.
Merci d'avance.
Partager