Razor HTML Bedingte Ausgabe

8

Ich habe eine Liste von Elementen, die ich als Inhalt eines Hauptverzeichnisses ausgeben möchte (das Hauptverzeichnis ist unten nicht enthalten). Jeder Artikel hat 3 Attribute: einen Abschnittsnamen, eine Bezeichnung und einen Wert. Jedes Element ist in einem eingeschlossen und jedes Mal, wenn sich der Abschnittsname ändert, muss ich ein öffnen (und das vorherige schließen, falls vorhanden). Ich verwende eine Razor-Ansicht mit diesem Code:

%Vor%

Das Problem ist: Jedes Mal, wenn sich der Abschnittsname ändert, wird kein fieldset-Tag (open und / oder close) generiert. Wo liege ich falsch? Wenn ich Html.Raw (oder @: als Alternative) nicht verwende, meldet der VS2010-Parser einen Fehler.

    
gattox 15.03.2011, 15:27
quelle

2 Antworten

14

Aufruf von Html.Raw gibt eine IHtmlString ; Es schreibt nichts auf die Seite.

Stattdessen sollten Sie

schreiben %Vor%

Die Verwendung von @: zwingt Razor dazu, es als einfachen Text zu behandeln, so dass es nicht wohlgeformt sein muss.

Sie können Ihren Code jedoch deutlich sauberer machen, indem Sie GroupBy aufrufen und eine verschachtelte foreach -Schleife erstellen.

    
SLaks 15.03.2011, 15:40
quelle
8

Ich denke wirklich, dass die Verwendung von @: , um solchen Code zu umgehen, ein Missbrauch dieser Escape-Sequenz ist. Das Problem sollte stattdessen behoben werden, indem der Code korrekt umgestaltet wird, damit ausgeglichene Tags leicht geschrieben werden können:

%Vor%

12 Zeilen Code statt 18

    
marcind 15.03.2011 18:04
quelle

Tags und Links