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

6

Quindi stavo cercando un buon modo in ASP.Net Core per creare alcuni "controlli" che rendessero visibili in una vista. Finora ho trovato ci sono 3 opzioni, e volevo avere un feedback su di loro.

  1. ViewComponents: sono come mini controller e usano metodi come le azioni per eseguire il rendering da una pagina del rasoio (vista). Credo che possano avere una logica autonoma quindi non c'è alcuna dipendenza da alcun modello di visualizzazione genitore.

  2. Cartelle EditorTemplate / DisplayTemplate: esistono in "Visualizzazioni / Condivisi /" e possono essere trascinati in una vista passando una proprietà del modello (usando DisplayFor() o EditorFor() ).

  3. @inject per ASP.Net Core: consente di iniettare un tipo in una vista (non ho idea se sia possibile associare una vista parziale?).

  4. Tralascio la possibilità di includere viste parziali direttamente, poiché non è il mio intento per il sistema di controllo su cui sto eseguendo il porting.

  5. Tag Helpers - è possibile iniettare il contesto di visualizzazione corrente e creare controlli anche da questi.

In una vecchia applicazione ASP.NET MVC avevo alcuni controlli resi dai template (# 2). Tuttavia, per .Net Core, sto pensando di utilizzare eventualmente ViewComponents (che sembrano più potenti) per il rendering delle visualizzazioni del rasoio associate (i controlli in pratica si limitano a racchiudere le visualizzazioni del rasoio). Per il momento sperimenterò la conversione in ViewComponents, ma mi piacerebbe qualche consiglio in merito, grazie.

    
posta James Wilkins 16.03.2017 - 04:19
fonte

2 risposte

1

Utilizza ViewComponent se hai qualche logica aziendale da eseguire. Supporta il principio Separation of Concerns (SoC). È possibile inserire parametri dalla classe ViewComponent dalla vista (utilizzare il file .cshtml del rasoio). Le viste ViewComponent sono disponibili in Viste / Condivise / Componenti . Può essere strongmente tipizzato. ViewComponent utilizza le chiamate al metodo asincrono, pertanto gli utenti non devono attendere il caricamento di tutto il contenuto di un'intera pagina. Inoltre, ViewComponent può essere richiamato come Tag Helper: è necessario aggiungere ViewCompenent come Tag Helper utilizzando la direttiva @addTagHelpers. Questa funzione offre supporto per gli editor degli sviluppatori nel modello dell'editor del rasoio.

Utilizza Editor / Modello di visualizzazione durante la modifica o la visualizzazione di determinati tipi o classi. Ad esempio, si desidera specificare che l'oggetto Product deve apparire con la tabella delle specifiche. Conserva il principio SECCO nell'applicazione MVC. Può essere usato come vista parziale che è legata al modello dell'oggetto che vuole visualizzare.

    
risposta data 14.06.2018 - 10:33
fonte
0

Il mio approccio è il seguente ...

  1. Utilizza ViewComponent per incapsulare la logica aziendale su come recuperare i modelli da visualizzare
  2. Se la vista di destinazione è semplice e / o singola, metti qui direttamente l'html, altrimenti usa un DisplayTemplate per rendere il modello

La logica è che continuo a separare le preoccupazioni tra la logica aziendale e il rendering.

Come esempio pratico prendi qualcosa come una struttura di menu specifica per il contesto; ViewComponent può determinare quali menu mostrare e DisplayTemplate può renderizzare ciascuno di essi.

    
risposta data 14.05.2018 - 18:05
fonte

Leggi altre domande sui tag