|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : créer du code html à partir d'objets [ Divers / Autre ] (mathmax)
Informations & options pour cette discussion
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é 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
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|