ASP.Net Core: ViewComponent gegen EditorTemplate / DisplayTemplate gegen @inject

10

Daher suchte ich in ASP.Net Core nach einer guten Möglichkeit, einige "Steuerelemente" zu erstellen, die in eine Ansicht gerendert werden. Bisher habe ich festgestellt, dass es drei Optionen gibt, und ich wollte ein Feedback dazu erhalten.

  1. ViewComponents: Diese sind wie Mini-Controller und verwenden Methoden wie Aktionen zum Rendern von einer Rasierseite (Ansicht). Ich glaube, dass sie eine in sich geschlossene Logik haben können, sodass keine Abhängigkeit von einem übergeordneten Ansichtsmodell besteht.

  2. EditorTemplate / DisplayTemplate-Ordner: Diese befinden sich unter "Ansichten / Freigegeben /" und können durch Übergeben einer Modelleigenschaft (mit DisplayFor()oder EditorFor()) in eine Ansicht gezogen werden .

  3. @inject für ASP.Net Core: Ermöglicht das Einfügen eines Typs in eine Ansicht (Ich habe keine Ahnung, ob eine Teilansicht zugeordnet werden kann?).

  4. Ich lasse die Möglichkeit aus, Teilansichten direkt einzuschließen, da dies nicht meine Absicht für das Steuerungssystem ist, über das ich portiere.

  5. Tag-Helfer - Es ist möglich, den aktuellen Ansichtskontext einzufügen und daraus auch Steuerelemente zu erstellen.

In einer älteren ASP.NET MVC-App hatte ich einige Steuerelemente, die aus den Vorlagen gerendert wurden (# 2). Für .Net Core denke ich jedoch darüber nach, möglicherweise stattdessen ViewComponents (die leistungsfähiger erscheinen) zum Rendern der zugehörigen Rasiereransichten zu verwenden (die Steuerelemente wickeln im Grunde nur Rasiermesseransichten ein). Im Moment werde ich mit der Konvertierung in ViewComponents experimentieren, würde mich aber über Ratschläge zu diesem Thema freuen, danke.

James Wilkins
quelle

Antworten:

2

Verwenden Sie ViewComponent, wenn Sie eine Geschäftslogik ausführen möchten . Es unterstützt das SoC-Prinzip (Separation of Concerns). Sie können Parameter aus der Ansicht in die ViewComponent-Klasse einfügen (verwenden Sie die .chtml-Datei für Rasierer). ViewComponent-Ansichten finden Sie unter Ansichten / Freigegeben / Komponenten . Es kann stark typisiert werden. ViewComponent verwendet asynchrone Methodenaufrufe, sodass Benutzer nicht auf das Laden des gesamten Inhalts einer gesamten Seite warten müssen. Darüber hinaus kann ViewComponent als Tag Helper aufgerufen werden: Sie müssen Ihren ViewCompenent als Tag Helper mithilfe der Anweisung @addTagHelpers hinzufügen. Diese Funktion bietet Entwickler-Editor-Unterstützung in der Rasiermesser-Editor-Vorlage.

Verwenden Sie Editor / Anzeigevorlage, wenn Sie bestimmte Typen oder Klassen bearbeiten oder anzeigen. Sie möchten beispielsweise angeben, dass das Produktobjekt mit der Spezifikationstabelle angezeigt werden muss. Das DRY-Prinzip bleibt in Ihrer MVC-Anwendung erhalten. Es kann als Teilansicht verwendet werden, die an das Objekt gebunden ist, das angezeigt werden soll.

Marcin C.
quelle
0

Mein Ansatz ist wie folgt ...

  1. Verwenden Sie die ViewComponent, um die Geschäftslogik zum Abrufen der anzuzeigenden Modelle zu kapseln
  2. Wenn die Zielansicht einfach ist und / oder die HTML-Datei hier direkt platziert wird, verwenden Sie andernfalls eine DisplayTemplate, um das Modell zu rendern

Grund dafür ist, dass ich immer noch Bedenken zwischen der Geschäftslogik und dem Rendering trenne.

Nehmen Sie als praktisches Beispiel so etwas wie eine kontextspezifische Menüstruktur. Die ViewComponent kann bestimmen, welche Menüs angezeigt werden sollen, und die DisplayTemplate kann dann jedes Menü rendern.

Paul Hatcher
quelle
Achten Sie darauf, diese zum Laden von Daten zu verwenden. Ein Mitarbeiter von mir hat das getan und später, als wir eine REST-API für AJAX erstellen wollten (zum Beispiel, wenn jemand Angular verwenden wollte), befand sich die Logik in der API und NICHT in den Komponenten. ;) Wenn Sie keine REST-API für Ihre Site verwenden (was heute üblich ist), werden die Komponenten am besten zum Rendern verwendet, indem nur Daten durch Controller-Aktionen an sie übergeben und das Ergebnis zurückgegeben werden. Am Ende habe ich beschlossen, Tag-Helfer mit einem injizierten Aktionskontext zu verwenden, um meine Steuerelemente als Tags in den Ansichten zu erstellen. Am Ende sieht es viel sauberer aus. ;)
James Wilkins
Ich füge den API-Dienst in die ViewComponent ein, um die Daten tatsächlich zu erfassen. Wenn wir dieselbe Logik benötigen, die das Ziel-HTML zurückgibt, z. B. um Ajax zum Aktualisieren der Komponente zu verwenden, mache ich sie über eine Controller-Methode verfügbar.
Paul Hatcher