Accueil > Forum > > > > créer du code html à partir d'objets
créer du code html à partir d'objets
dimanche 27 mai 2007 à 14:43:14 |
créer du code html à partir d'objets

mathmax
|
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
(http://fra.orkos.com/Products/PriceList). 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 (http://fra.orkos.com/Products/PriceList). 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.
Mathmax
|
|
dimanche 27 mai 2007 à 15:29:22 |
Re : créer du code html à partir d'objets

jesusonline
|
Bonjour, Alors là je ne comprend pas, le fonctionnement d'ASP.net repose sur des objets qui génére du code HTML : les contrôles ... Pourquoi ne pas faire un controle qui prend en datasource un produit ou une liste de produit ? et ensuite utiliser les templates pour les parties génériques ? Par exemple sur CodeS-SourceS j'ai fait un contrôle CodeList qui prend une List<Code> (en fait un PaginateList<Code>) et ensuite dans la partie .aspx j'ai par exemple : <cs:CodeList ID="CodeList1" runat="server"> <ItemTemplate> <h2><%#Container.DataItem.Title %></h2> </ItemTemplate> </cs:CodeList> le contrôle gère la pagination, et tout ce qui va avec, tout ce que j'ai à faire c'est le code html pour un élément. Je comprend néanmoins ce que tu veux dire par "feuille XSLT sur les objets" mais si tu créer ton propre controle ce sera beaucoup plus riche. Comment ferais tu pour gérer des événements avec ton xslt ? tu ne peux pas inclure de button, ni quoi que ce soit. Sinon, tu peux très facilement faire un contrôle de transformation d'objet métier en HTML avec du XSLT. <toto:DAOToXML id="toto" runat="server"> <xsltTemplate> ici ton template XSLT </xsltTemplate </toto> et ensuite dans le code behind tu lui donne en datasource ton objet, ton controle va se charger de serializer ton objet en XML et ensuite faire la transformation XSLT. Par contre niveau perf c'est pas génial faudrais prévoir un système de mis en cache du XML sérializer. On peut aller plus loin en faisant son propre buildProvider qui va se charger de transformer ton flux XSLT en vrai code .net via CodeDOM (ce que fait déjà le PageBuildProvider pour créer le type Page final mais avec du HTML) et ainsi pouvoir gérer des controles dans notre flux XSLT. (j'avoue, ca nécessite un peu de boulot, faire un analyseur XSLT ne doit pas être super simple :)) en ce qui concerne ASP.net 3 il est sortis il y a 6 mois avec le "truc" qu'ils ont appellé .net 3, mais y'a aucun changement pour ASP.net, ASP.net 3.5 est prévu pour fin de l'année et intégrera nativement ASP.net Ajax ainsi que de nouveaux contrôles mais aucune modification des base de ASP.net 2.0 Cyril - MSP - MCTS ASP.net & SQL
|
|
dimanche 27 mai 2007 à 18:21:00 |
Re : créer du code html à partir d'objets

mathmax
|
Pourquoi ne pas faire un controle qui prend en datasource un produit ou
une liste de produit ? et ensuite utiliser les templates pour les
parties génériques ?
Je suis conscient que c'est possible d'utiliser des contrôles. Mais créer un contrôle personnalisé en écrivant en dur la méthode de rendu HTML n'est pas productif alors qu'avec XSLT l'écriture de la page se fait très aisément (c'est aussi simple que d'écrire une page html, mais plus rapide encore). Il faut savoir que si je crée des contrôles, je vais très rarement les réutiliser car je les veux très spécifiques au niveau du HTML rendu. Donc je ne veux pas perdre de temps à développer un contrôle juste pour la page sur laquelle je travaille. Comment ferais tu pour gérer des événements avec ton xslt ? tu ne peux pas inclure de button, ni quoi que ce soit. Pour les boutons, j'écris directement le tag html, ça ne me pose aucun problème. .Pour les événements, je me sert actuellement des événements javascript qui soit appelle une fonction côté client (comme mon filtre) soit une fonction côté serveur. Je suis d'accord que ce n'est pas idéal. La solution XSLT à des inconvénients majeurs, mais on pourrais très bien imaginer une sorte de feuille XSLT sur les objets qui gèrent les événements. Je reste persuadé que ça serait l'idéal. En attendant, je cherche la meilleure solution possible. utiliser les templates pour les parties génériques ?
Je ne connais pas les templates. Permettent t-il de faire de la récursivité ou sont-il juste fait pour parcourir une liste d'objets ? Je peux les appeler plusieurs fois, à différent endroits de ma page ASPX ? Mathmax
|
|
mardi 29 mai 2007 à 16:12:30 |
Re : créer du code html à partir d'objets

Yopyop
|
Salut,
Tout d'abord, il est vrai que la création d'un contrôle peut prendre du temps, mais il faut voir cela comme un investissement, car le but est de pouvoir réutiliser/partager ce contrôle.
Ce n'est apparemment pas ton cas, donc tu considères le temps passé sur ton contrôle comme une perte de temps (plus ou moins). Mais, imagine qu'un autre client voit ta page et qu'il désire exactement la même (les données changent bien sûr, ainsi que la CSS, mais les fonctionnalités restent).
De plus, créer un contrôle n'implique pas forcément écrire en dur le rendu html (en tous cas pas plus qu'en passant par xml et xsl), il suffit de bien séparer le traitement des données, des événements et de l'affichage.
Pour info, il existe un controle (System.Web.UI.WebControls.Xml) qui permet de faire ce que tu fais (il faut simplement lui associer un fichier xsl via la propriété TransformSource="news.xsl" et lui associer un document xml via XMLDocument). Et oui, il faut toujours passer par une conversion XML ...
En ce qui concerne la meilleure solution possible, c'est celle qui convient au client 
Plus sérieusement, il faut peser le pour et le contre de chacune des méthodes que tu as décrites en introduction (il y en a d'autres) et choisir la plus adaptée (et il y a une question de préférence personnelle également, apparemment tu aimes bien le xml/xslt).Typiquement, pour un simple "Hello Word", la méthode employée ne sera pas la même que si tu fais une page qui affiche le résutat d'un rapport, avec drill-down, filtres etc.. etc...
yopyop PS: ta page me plaît bien 
|
|
mercredi 30 mai 2007 à 14:39:28 |
Re : créer du code html à partir d'objets

mathmax
|
En fait, ce qu'il faudrait c'est avoir la possiblité d'ajouter des instructions logiques dans le cade de la page ASPX. Je sais que l'on peut mettre du code c# à l'interieur d'une balise html dans la page aspx en écrivant : <% Response.Write(maString); %> Je voudrais maintenant faire l'inverse : écrire du code html à l'intérieur d'une insctruction ou fonction c# dans la page aspx. N'est-ce vraiment pas possible ? Mathmax
|
|
mercredi 30 mai 2007 à 14:55:17 |
Re : créer du code html à partir d'objets

jesusonline
|
l'inverse ? Je pense que tu gagnerais à regarder le fonctionnement du rendering d'ASP.net ... t'y gagnerais beaucoup. Cyril - MSP - MCTS ASP.net & SQL
|
|
mercredi 30 mai 2007 à 15:32:15 |
Re : créer du code html à partir d'objets

mathmax
|
J'aimerais en connaitre plus sur le fonctionnement du rendering d'ASP.net. Pourrais-tu m'endiquer ou je peux trouver des informations le concernant ? Mathmax
|
|
mercredi 30 mai 2007 à 15:33:47 |
Re : créer du code html à partir d'objets

Yopyop
|
Euh, mathmax,
moi pas comprendre ??????
tu veux :
Ecrire du code HTML à l'intérieur d'une instruction ou fonction c# ... ou Ecrire du code HTML via une instruction ou fonction c# ...
Parce que pour info... si je ne dis pas de bêtise, le but d'asp/asp.net/java/php et autres, c'est justement de pouvoir ajouter des instructions logiques lors du rendering (côté server) de la page... non ?
PS: 1/ On utilise plus tellement le Response.Write en .NET. 2/ Il est préférable de ne plus mettre le code directement dans la page, mais de mettre la logique dans le code behind.
yopyop
|
|
mercredi 30 mai 2007 à 15:54:42 |
Re : créer du code html à partir d'objets
|
mercredi 30 mai 2007 à 16:13:01 |
Re : créer du code html à partir d'objets

mathmax
|
Il est préférable de ne plus mettre le code directement dans la page, mais de mettre la logique dans le code behind.
Pour moi, il y a deux choses. La logique métier et la logique d'affichage. Je voudrais pouvoir mettre toute la logique métier dans le code behind et toute la logique d'affichage dans la page aspx. Voilà en gros le genre de chôse que j'aimerais pouvoir écrire : <table> <tr> foreach (Product product in pruductList) { <td><%Response.Write(product.Name); %></td> <td><%Response.Write(product.Price); %></td> } </tr> </table> Bon, je sais que ça n'est pas possible, mais je recherche une méthode qui équivaudrait à cela. En fait, je ne fais ni plus, ni moins que reprendre le concept xslt. En xslt cela donnerais : <table>
<tr> <xsl:foreach select="Products/Product">
<td><xsl:value-of select="Name" /></td>
<td><xsl:value-of select="Price" /></td>
</xsl:foreach
</tr>
</table> J'ai pris l'exemple, d'une boucle foreach, mais j'aimerais pouvoir faire des appels récursif, des conditions,.... Ce que je ne veux pas, c'est construire mon code html dans une string dans le code behind. Je le veux entièrement dans la page aspx. Y a t'il des solutions avec les templates (dont parlais jesusonline plus haut) ou autre ? Mathmax
|
|
Cette discussion est classée dans : solution, asp, code, html, objets
Répondre à ce message
Sujets en rapport avec ce message
problème ASP [ par Pierremarie ]
J'ai un code qui ouvre une base access et transfert un état en format HTML, si quelqu'un voit une erreur je suis preneur:Dd = "C:\BDD\DYSFONCTIO.mdb"S
Comment traduire un Code HTML en ASP [ par Menko ]
Salut!je suis une jeune debutante en Programmation ASP.j aimerai programmer un Coposant ASP et j ai a ma disposition un Exemple deja terminé avec du
ASP.Net... jusqu'où ?????? [ par BigJim ]
La question vient du fait que je code à la main la plupart du temps, même si j'utilise Dreamweaver pour générer le code HTML "standard".L'écriture man
code source HTML des pages ASP [ par pbocsak ]
Bonjour tout le monde,J'aimerais savoir si il y aurait un code qui permettrait de montrer dans une page ASP le code source d'une quelconque autre page
ASP-HTML [ par pbocsak ]
Bonjour,J'ai une page depuis laquelle je souhaiterais récuperer un bout du code HTML. Or, ce code particulier ne m'est retourné que si je suis identif
[ASP] Récupérer les texte généré par du code HTML [ par aloisio11 ]
Bonjour à tous,J'ai une variable contenant du code HTML et je voudrait en extraire seulement le texte qui est censé être affiché.Y a t il quelque chos
[sql asp xml] choix menus deroulants [ par joccd ]
Bonjour,Je bosse actuellement sur un intranet codé en asp avec des menus déroulantsLes éléments des menus déroulants sont le résultats de requêtes sql
mise à jour d'un gridview [ par verbeyst ]
Bonjour, J'essaie de faire une mise à jour de ma gridview. je crois avoir suivi "bêtement" la procédure requise, mais asp net m'affice un message
Publication d'un site en ASP [ par jmrouges ]
Bonjour à tousJ'ai développé deux sites. Un entièrement en HTML et l'autre en ASP.NET.Ils fonctionnent tous les deux en local sur mon poste avec IIS 7
Code behind et javascript [ par emalio13 ]
Bonjour à toutes et à tous,Etant débutante en ASP.net, je rencontre quelques difficultés.En effet, je développe une application avec visual web develo
Livres en rapport
|
Derniers Blogs
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Forum
UTILISATEURUTILISATEUR par zaydounhlel
Cliquez pour lire la suite par zaydounhlel RE : VIRUSRE : VIRUS par ghuysmans99
Cliquez pour lire la suite par ghuysmans99
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|