Rendering in C# - Objekte in Html
Wir haben Haufen von Domain-Unternehmen, die dargestellt werden sollen, um ein html-format, das zeigt Ihre Details in einem pop-up-Fenster.
Ich wäre froh, so etwas zu tun:
Product product = new Product(...);
product.ToHtml(); //or: HtmlRenderer.Render(Product);
aber mein Hauptproblem ist, wie dies zu tun Sachen von hinten.
Ich habe 3 verschiedene Antworten:
1. Rendern Von Code:
Kann ich einfach schreiben mein code für das Rendern der Html-in die Methode ToHtml (C#) - das problem dabei ist, dass es zu statisch. wenn Sie möchten, um ein wenig zu bewegen, den Kopf in die Mitte, sollten Sie den code ändern.
darüber hinaus ist es sehr schwer zu Lesen, Html Einrückung in C#.
2. Mithilfe von XSL:
XSL-Dateien problemlos verwalten können die Html-Vorlage und mit Hilfe von XSLT kann ich das transformieren von XML-Datei an die richtige Stelle der Dokumente.
der parser bereits von einer anderen Person geschrieben (müssen nur lernen, die syntax)
** für diese brauchen wir, dass jedes Objekt serialisieren in Xml. und wenn das Objekt geändert -> die Xml geändert werden --> die xslt geändert werden müssen zu
** dies wird auch geben Sie mir die option zum Einrücken von html ganz einfach zum Beispiel: hinzufügen von css-Fähigkeiten und\oder ändern Sie die html-design
3. mit anderen template-engine:
Schreibe meine eigenen C# -> Html-template-Engine, so dass es liest die Vorlage aus einer Datei (*.Vorlage) und fügen Sie die richtige Immobilie am richtigen Ort der Vorlage mit der spiegelung.
** in dieser Lösung haben wir viele Fragen, die wir uns vorstellen können, zum Beispiel: wie die syntax Aussehen soll?
ist das Ding ok?
%Name% %Beschreibung%
und wie wir Sie behandeln können arrays?
** können wir vielleicht eine vorhandene engine (Brail-oder T4-Template)?
Was bevorzugen Sie?
kennst du einen guten Motor?
für jetzt bevorzuge ich die zweite Lösung, aber es wird sehr langsam.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich nicht mehr Zustimmen mit John Feminella. Die Integration der Html-rendering direkt in Ihre Domäne Entitäten ist eine schreckliche Verschmutzung von Ihrer domain mit einem völlig willkürlich und externen Anliegen. Wie John schon sagte, Sie machen Ihre Einheiten sehr spröde indem Sie das tun, und brechen diese beiden kritischen Regeln: Separation of Concerns und das Single Responsibility.
Aus der Auswahl, die Sie gab, #3 ist die nächstgelegene Sie zu einem geeigneten Weg, es zu tun. Müssen Sie nicht schreiben Sie Ihre eigenen template-engine. Es gibt viele Kostenlose und fertige template-engines auf dem Netz, die nicht den job mehr als ausreichend (NVelocity, StringTemplate, Brail, etc. etc.)
Halten rendering, wo es hingehört...in der Präsentation/view und die Umwelt nicht verschmutzt Ihre domain mit der höheren Ebene betrifft.
Ich hatte einmal ein Bedürfnis für die Darstellung einer Sammlung von jeder Art in einer Html-Tabelle. Ich habe eine extension method auf IEnumerable<T> hatte überladungen für css und dergleichen. Sehen Sie mein blog-post darüber hier:
http://crazorsharp.blogspot.com/2009/03/cool-ienumberable-extension-method_25.html
Er verwendet reflektion, um alle Eigenschaften des Objekts und macht eine nette kleine Tabelle. Sehen, ob das funktionieren würde für Sie.
Dies ist die Aufgabe Ihrer Sicht nicht mit den Controllern oder models. Wie Sie vermuten, mit der Methode (1) werden änderungen sehr spröde. Stattdessen schreiben Sie einen view-fragment für jeden Weg, in dem Sie möchten, um zu machen eine Besondere Domäne Entität. Dann ziehen Sie einfach in den entsprechenden Ansichten zu bauen, die Ihre letzten Seite.
Grüße ich bevorzuge Methode A. Die HTML-ist bereits ein standard, damit Sie sollte nicht schlagen Sie sich zu viel mit solchen Formaten wie XML (via XSL - Methode 2) oder ein benutzerdefiniertes format (Methode 3).
Wenn das schreiben in/für ASP.NET MVC könnte man jedoch bauen .ASCX (user control) akzeptieren würde, ein Objekt des Typs und Rendern Sie den passenden HTML-Code. Und Sie bekommen nicht das böse C# Einzug und keine Hervorhebung noch AutoVervollständigen.
Könnte man auch schreiben mehrerer Benutzer zu empfangen, die verschiedene Szenarien für ein Objekt geben.
Nach etwas recherche habe ich meine eigene Funktion zum konvertieren eines Beliebigen Objekts toHtmlString.
VB .Net-Code:
erhalten Sie den Eigenschaftsnamen und-Wert für ein bestimmtes Objekt. Sie können manipulieren html-basierend auf Ihren
Persönlich würde ich Methode kombinieren zwei und drei: erstellen Sie Einfach eine generische XML-Dokument mit Reflexion sagen:
Verwendung einer XSTL-stylesheet zu erstellen, die die eigentlichen HTML-von diesem.
Gibt es einen Grund, warum Sie nicht wollen, erstellen Sie ein benutzerdefiniertes Steuerelement .ascx-Datei, die nimmt Domäne Entitäten-Objekt als argument und dann kannst du die gui, wie Sie wollen. Auf diese Weise konnte Sie dynamisch hinzufügen der Steuerelemente auf die Seite und setzen Sie einfach eine Eigenschaft an, die Sie bevölkern.
Edit 1:
Rendern Sie einfach das Steuerelement an ein HTMLTextWriter statt es auf die Seite.
Ausgabe
Natürlich verwenden Sie das benutzerdefinierte Steuerelement anstelle einer eingebauten Steuerung, aber das war eine schnelle und einfache demo.