Le rendu des Objets C# Html
Nous avons des tas de Domaine Entités qui doivent être rendus à un format html, ce qui montre leur détail dans une fenêtre pop-up.
Je serais heureux de faire quelque chose comme ceci:
Product product = new Product(...);
product.ToHtml(); //or: HtmlRenderer.Render(Product);
mais mon principal problème est de savoir comment faire ce genre de choses derrière.
J'ai 3 réponses différentes:
1. Rendu Par Le Code:
Je peux simplement écrire mon code pour le rendu Html à l'intérieur de la ToHtml Méthode (C#) - le problème, c'est que c'est trop statique. si vous souhaitez déplacer un peu la tête pour le moyen que vous devriez changement de code.
en outre, il est très difficile de lire Html indentation en C#.
2. À l'aide de XSL:
Fichiers XSL permet de gérer facilement le modèle Html et en utilisant XSLT je peux transformer un fichier XML à la bonne place des documents.
l'analyseur a déjà été écrit par quelqu'un d'autre (juste besoin d'apprendre la syntaxe)
** pour cela nous avons besoin que chaque objet peut sérialiser à Xml. et si l'objet a changé -> le Xml sera changé --> le xslt besoin d'être changé aussi
** ce sera aussi pour moi l'option pour indenter le code html facilement par exemple: l'ajout de capacités css et\ou de modifier la conception html
3. l'utilisation d'autres modèle de moteur:
Écrire mon propre C# -> Html Moteur de template, donc il va lire le modèle à partir d'un fichier (*.modèle) et insérez le droit de propriété dans le droit place du modèle à l'aide de la réflexion.
** dans cette solution, nous avons beaucoup de questions que nous pouvons penser, par exemple: comment la syntaxe devrait être comme?
est-ce ok?
%Name% %Description%
et comment nous pouvons gérer tableaux?
** on peut peut-être utiliser un moteur existant (en Braille ou T4-Templating)?
Que préférez-vous?
connaissez-vous un bon moteur?
pour l'instant, je préfère la deuxième solution, mais il va être très lent.
grâce
OriginalL'auteur rabashani | 2009-05-25
Vous devez vous connecter pour publier un commentaire.
Je ne peux pas être plus d'accord avec Jean Feminella. L'intégration de rendu Html directement dans votre domaine d'entités est une horrible pollution de votre domaine avec un choix totalement arbitraire et externes préoccupation. Comme l'a dit John, vous allez faire votre entités très fragile en faisant cela, et cassez les deux de ces critiques règles: la Séparation des Préoccupations et Unique Responsabilité.
Du choix que vous avez donné, #3 est le plus proche d'un moyen approprié de le faire. Vous avez besoin d'écrire votre propre moteur de template. Il en existe de nombreux gratuit et prêt-à-moteurs de template sur le net qui va faire le travail convenablement (NVelocity, StringTemplate, en Braille, etc. etc.)
Garder rendu là où il appartient...dans votre présentation/vue, et ne pollue pas votre domaine de niveau supérieur préoccupations.
OriginalL'auteur jrista
Une fois, j'ai eu un besoin de rendre une collection de n'importe quel type d'un Tableau Html. J'ai créé une méthode d'extension sur IEnumerable<T> qui avait surcharges pour les css et le comme. Vous pouvez voir mon billet de blog à ce sujet ici:
http://crazorsharp.blogspot.com/2009/03/cool-ienumberable-extension-method_25.html
Il utilise la réflexion pour obtenir toutes les propriétés de l'objet, et rend un joli petit tableau. Voir si cela pourrait fonctionner pour vous.
OriginalL'auteur BFree
C'est le travail de votre point de vue, pas vos contrôleurs ou des modèles. Comme vous le soupçonnez, à l'aide de la méthode (1) rendra vos changements très fragile. Au lieu de cela, écrire une vue fragment pour chaque voie dans laquelle vous souhaitez effectuer le rendu d'un domaine particulier de l'entité. Ensuite, il suffit de tirer dans les points de vue pour construire votre page finale.
OriginalL'auteur John Feminella
Sincèrement, je préfère la méthode A. Le HTML est déjà un standard de sorte que vous ne vous punissez pas trop par l'intermédiaire de formats tels que XML (via XSL - méthode 2) ou un format personnalisé (méthode 3).
Si l'écriture dans/pour ASP.NET MVC vous pouvez toutefois créer une .ASCX (contrôle de l'utilisateur) qui accepterait un objet de type et de rendre l'idéal HTML. Et vous n'obtenez pas le méchant C# indentation et la mise en évidence, ni la saisie semi-automatique.
Vous pouvez également écrire à plusieurs points de vue de l'Utilisateur pour accueillir les différents scénarios pour un type d'objet.
Dans ce cas, vous pouvez sérialiser dans un format JSON & envoyer à d'autres utilisateurs de l'utiliser.
n'est pas encore assez, je veux qu'ils reçoivent tous la même INTERFACE utilisateur. manipulez pas la logique de rendu par lui-même.
Ensuite, utilisez la méthode 2 - un fichier XML qui doit être traduit dans le format approprié où vous en avez besoin.
J'AIME ASP.Net et je pense toujours que vous pouvez l'utiliser pour votre usage. Vous pouvez effectuer le rendu d'un contrôle html manuellement, à l'extérieur de n'importe quelle page du cycle de vie (voir la section blogs.x2line.com/al/articles/859.aspx).
OriginalL'auteur Andrei Rînea
Après un peu de recherche, j'ai fait mon propre fonction pour convertir n'Importe quel Objet toHtmlString.
VB .Net Code:
elle permettra d'obtenir le nom de la propriété et de la valeur d'un objet particulier. vous pouvez manipuler html basé sur votre
OriginalL'auteur Syed Shariq
Personnellement, j'aurais de la méthode de combinaison de deux et trois: il suffit de créer un générique de document XML à l'aide de la réflexion, de dire:
et l'utilisation d'un XSTL feuille de style pour créer le code HTML réel à partir de ce.
OriginalL'auteur MartinStettner
Est-il une raison vous ne souhaitez pas créer un contrôle personnalisé .fichier ascx qui prend de domaine entités de l'objet comme argument et puis vous pouvez faire l'interface graphique de la manière que vous voulez. De cette façon, vous pourriez ajouter dynamiquement des contrôles de la page et juste définir une propriété afin de les remplir.
Edit 1:
Juste rendre le contrôle à un HTMLTextWriter au lieu de le placer sur la page.
Sortie
Bien sûr utiliser votre contrôle personnalisé à la place d'un construit dans le contrôle, mais c'était un moyen rapide et facile de démonstration.
Mais vous pouvez tout de même rendre votre contrôle html texte de l'écrivain et de transmettre cette valeur. De cette façon, vous pouvez toujours concevoir et de maintenir un ascx pour la commodité et la simplicité par rapport à celle de l'écriture de votre propre xsl ou le moteur de template.
ajout d'un code à ma réponse à montrer comment ascx pourrait très bien fonctionner.
OriginalL'auteur benjamin