IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

créer du code html à partir d'objets


Sujet :

ASP.NET

  1. #1
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut créer du code html à partir d'objets
    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.
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  2. #2
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    pour reproduire orcas tu peut tres bien utiliser le control datalist.

    ps: la seule difficulte que je vois c'est le header qui ne bouge pas .
    sinon pour le reste le datalist est tout a fait approprie .

    en esperant avoir bien compris ta question qui reste un peu flou sur certain point.

  3. #3
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    le control datalist ne va me permettent que de parcourir une liste d'objet non ? Dans mon cas, j'ai 2 types d'objets :
    les objets de type Category (=une catégorie de produit)
    les objets de type Item (=un produit)
    Chaque catégorie peut contenir des objets Category, et des objet Item. Il faut donc que j'utilise la récursivité pour parcourir ma hiérarchie d'objets en profondeur. Est-ce possible avec un tel contrôle ?
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  4. #4
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    tu peux tres bien avoir un datalist imbrique dans un autre datalist .

  5. #5
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    La profondeur de ma hiérarchie n'a pas de limite. On peut avoir autant de catégories imbriquées les unes dans les autres que l'on veut. Il faut forcément faire une récurrence sur les objets.
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

Discussions similaires

  1. [DOM] Analyser XML pour créer du code html
    Par Zingzing56 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 27/08/2010, 19h53
  2. Créer un tableau html à partir d'une requête sql
    Par biba35 dans le forum Langage
    Réponses: 5
    Dernier message: 05/02/2009, 09h14
  3. Créer un tableau html à partir d'une requête sql
    Par biba35 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 04/02/2009, 10h17
  4. Réponses: 7
    Dernier message: 14/05/2007, 16h31
  5. [DOM]Créer dynamiquement du HTML à partir d'une chaîne
    Par jothi35 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/08/2006, 20h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo