Ho un requisito leggermente più complesso rispetto al singolo Viewcomponent medio che sto cercando di risolvere.
Ho creato un'app Web con Razor Pages utilizzando .Net Core 2.1 e Entity Framework
In una delle pagine ho una vista a schede che uso per inserire e visualizzare informazioni in vari formati, ho costruito ogni "scheda" come una pagina di rasoio individuale per ora in quanto tutti usano più modelli, uno da visualizzare e uno per acquisire dati. Ho provato ad usare viste parziali senza fortuna, perché quando provo a cambiare la scheda l'intera pagina si ricarica, non ideale e un po 'più lentamente.
Inserisci Viewcomponents, posso ottenere un semplice viewcomponent che consuma un modello per funzionare correttamente, ma per le altre schede in cui ho iniettato / associato 2-3 modelli non riesco a trovare un modo per implementarlo. Sto chiedendo troppo del framework?
NB. Sto cercando di farlo usando solo le pagine del rasoio con CSharp e senza Javascript. È possibile o è necessario gettare la spugna e passare ad Angular-MVC?
Ci sono alcune opzioni disponibili. Il tuo miglior percorso in avanti, onestamente, è una classe wrapper, essenzialmente un modello di modelli, se vuoi. È sufficiente creare una classe con le proprietà su di essa per ciascuno dei singoli modelli effettivamente necessari. Ciò ti consente quindi di utilizzarlo come modello per la tua pagina, ma comunque di accedere a tutti i tuoi singoli modelli per le schede.
I componenti della vista sono un approccio valido, ma ci sono due cose che dovresti realizzare:
Visualizza il rendering dei componenti è interamente autonomo. In altre parole, la tua azione / vista principale si trasforma sostanzialmente in uno stub, non facendo realmente nulla da solo. Invece, tutta la logica per costruire il tuo modello e passarla alla vista per ogni scheda è contenuta nel componente della vista corrispondente a quella scheda.
I componenti di vista servono solo a rendere l'HTML in una pagina. Non puoi pubblicare su un componente di visualizzazione. Continueresti comunque a postare la tua azione principale, quindi sarebbe necessario essere configurato per gestire qualsiasi cosa stia facendo la scheda in questione.
Infine, hai almeno bisogno di JavaScript per l'interfaccia della scheda, se non vuoi andare al server ogni volta che cambi le schede. Il passaggio da una scheda all'altra è una funzionalità dinamica che è possibile solo con JavaScript.