Elegant foreach - sonst Konstrukt in Razor

8

Viele Template-Engines haben eine spezielle Syntax, die eine Kombination aus foreach und else ist. Grundsätzlich wird die else -Klausel ausgeführt, wenn die foreach -Schleife keine Iterationen hat. Dies kann nützlich sein, wenn Sie eine Art von no-Elementen in der Liste Fallback anzeigen möchten.

In Twig zum Beispiel die for loop kann so aussehen

%Vor%

Mit der Razor View Engine möchte die Vorlage eine zusätzliche Überprüfung der Anzahl der Elemente in der Sammlung vornehmen:

%Vor%

Meine Fragen lauten also: Können wir mit der Razor View Engine auf die eine oder andere Weise eine ähnliche Eleganz erreichen?

    
Thomas 19.10.2011, 10:48
quelle

4 Antworten

9

Konsolidierung der Antworten von Jamiec und Martin Booth. Ich habe die folgende Erweiterungsmethode erstellt. Es dauert ein IEnumerable als erstes Argument und dann zwei Delegaten zum Rendern des Textes. In den Razor Views können wir zwei Templated Delegates übergeben. Kurz gesagt bedeutet dies, dass Sie Vorlagen eingeben können. Also hier ist die Erweiterungsmethode und wie Sie es nennen können:

%Vor%

Und in den Razor Ansichten:

%Vor%

Alles in allem, ziemlich sauber.

UPDATE Umsetzung der in den Kommentaren gemachten Vorschläge. Diese Erweiterungsmethode verwendet ein Argument, um die Elemente in der Auflistung zu durchlaufen, und gibt ein benutzerdefiniertes HelperResult zurück. In diesem Helperresult kann man die Else -Methode aufrufen, um einen Template-Delegaten zu übergeben, falls keine Elemente gefunden werden.

%Vor%

Dies kann dann wie folgt aufgerufen werden:

%Vor%     
Thomas 19.10.2011, 11:42
quelle
2

Der einzige Weg, wie ich denken könnte, um so etwas zu erreichen, ist mit ein paar Erweiterungen zu IEnumerable<T> :

%Vor%

Damit können Sie zwei Aufrufe miteinander verketten, wie in diesem Live-Beispiel gezeigt: Ссылка , das den folgenden Code verwendet :

%Vor%

Ganz so, wie das zu einer Razor-Vorlage passt, bin ich mir immer noch unsicher ... aber vielleicht gibt dir das etwas, womit du weitermachen kannst.

    
Jamiec 19.10.2011 11:10
quelle
1

Nichts gebaut in afaik, aber Sie könnten es wahrscheinlich auf Ihre Bedürfnisse erweitern:

Ссылка

Ich könnte später vielleicht helfen, wenn ich mein Telefon nicht benutze, wenn Sie immer noch keine Antwort haben

    
Martin Booth 19.10.2011 11:15
quelle
0

Vielleicht war das nicht möglich, als die Frage gestellt wurde, aber ich habe das gerade so erreicht:

%Vor%     
Philip Stratford 18.01.2018 15:23
quelle