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
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?
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.
Dies kann dann wie folgt aufgerufen werden:
%Vor% Der einzige Weg, wie ich denken könnte, um so etwas zu erreichen, ist mit ein paar Erweiterungen zu IEnumerable<T>
:
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.
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
Vielleicht war das nicht möglich, als die Frage gestellt wurde, aber ich habe das gerade so erreicht:
%Vor%Tags und Links asp.net-mvc .net razor twig templating