Frage

Es gab viele Diskussionen darüber View-Engines Für ASP.NET MVC und einige Kritikpunkte gegen die Inline-Tag-Soup mit For-Schleifen und Dingen.

Die Alternative oder Ergänzung bestand darin, HTML-Helpers zu verwenden, die nur Inline-Methodenanrufe sind.

Wenn ich heute in ASP.NET MVCs HTML-Helpern schaue, verwenden sie eine Klasse namens namens Tagbuilder.

Mein Vorschlag ist zu Verwenden Sie LINQ bis XML, um stark tippt und korrekt formatiert (x) HTML:

XDocument output = new XDocument();
XElement root = new XElement("div",
    new XAttribute("class", "root_item"));

XElement iconImage = new XElement("img",
    new XAttribute("src", ResolveUrl("~/image.gif")),
    new XAttribute("alt", "This is an image"));

XElement link = new XElement("a",
    new XAttribute("class", "link"),
    new XAttribute("href", "http://google.com"),
    new XText("Link to Google"));


root.Add(link);
root.Add(iconImage);
output.Add(root);

Ich mag es, weil es wie die stark typisierten Steuerelemente in Webformen ist, wo Sie eine Schaltfläche neu aufbauen und der Steuersammlung eines anderen Steuerelements hinzufügen können.

Gibt es offensichtliche Probleme oder Einschränkungen?

War es hilfreich?

Lösung

Ich kann mir zwei Probleme der oben genannten Methode vorstellen. Zuerst,

XElement iconImage = new XElement("img",
new XAttribute("src", ResolveUrl("~/image.gif")),
new XAttribute("alt", "This is an image"));

Unter Bezugnahme auf das, was Sie oben schreiben, können wir so etwas haben wie:

<img src=<%=whatever%> alt=<%=whatever%> />

Dies könnte ein persönliches Urteilsvermögen sein oder was, aber ich stimme mit Sicherheit die spätere "menschliche" lesbare "menschliche". Richtig, die Verwendung von LINQ 2 XML könnte die seltsame < %} %> beseitigen, die auf meinen ASPX -Seiten herumwandern, aber gleichzeitig lassen Sie diese "guten Jungen" ungeschickt aussehen.

Der zweite könnte mit Leistungsproblemen kommen. Ich denke, das Parsen und Ausführen von Linq 2 XML könnte ziemlich langsam sein, obwohl ich keine Daten dazu habe.

Persönlich experimentiere ich immer noch das MVC-Framework. Es fühlt sich an, als würde ich zu alten Zeiten wie ASP oder PHP 3.x zurückkehren, da fast alle interaktiven Teile explizit behandelt werden, anstelle des Fensters/Gui-oop-orientierten ASP-DOT-Netto-Frameworks. Ich denke, der Hauptgrund, warum ich MVC verwenden werde, ist, dass er die besten kundenseitigen HTML-Codes der qualitativ qualitativ hochwertigen garantieren kann.

Andere Tipps

Das ist eine großartige Idee! Das einzige Problem, das ich damit sehe, ist die Verwendung von C#. ;) VB.NET hat eine viel bessere Unterstützung für die Erzeugung von XML über seine XML -Literale.

Der Code, den Sie in Ihrer Frage auflisten, könnte in VB.NET so geschrieben werden. (Mit dem Hinzufügen des Textes "Dies ist ein Link" Da Ihr Beispiel keinen Text innerhalb der enthielt a Element.)

Dim root = <div class="root_item">
               <img src=<%= ResolveUrl("~/image.gif") %> alt="This is an image"/>
               <a class="link" href="http://google.com">This is a link</a>
           </div>

Es gibt noch <%= ... %> Tags, aber sie werden zur Gültigkeit zur Kompilierung überprüft. Wenn dieser Code der Rückgabewert einer Funktion gemacht wurde, die Typ Xelement zurückgegeben hat, könnte dieses XHTML -Snippet an anderer Stelle in der Website wiederverwendet werden.

Ich habe ein Projekt auf Codeplex, das VB.NET XML -Literale als benutzerdefinierte ASP.NET MVC View Engine unter verwendet http://vbmvc.codeplex.com. Es basiert auf Code von Dmitry Robsman, WHO ist Product Unit Manager für ASP.NET bei Microsoft. Ansichten sind VB.NET -Klassen und Master -Seiten sind Basisklassen. Du Neu-Up Teilweise Ansichtsklassen, anstatt sie mit einer Namenszeichenfolge zu verweisen, ist dies auch eine zusätzliche Kompilierungszeitprüfung. Anstelle der HTMLHelper -Klasse, die Saiten zurückgibt, gibt es eine XHTMLHelper -Klasse, die Xelement zurückgibt und ähnlich wie Sie vorgeschlagen haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top