Architettura per componenti UI Riutilizzo in ASP.NET MVC

5

Ho eseguito una serie di progetti LOB ASP.NET MVC (MVC5) e vorrei ristrutturare il modo in cui gestisco alcune cose per un nuovo progetto. In particolare, ho un componente che voglio riutilizzare in più punti dell'applicazione.

Metodo corrente

Diciamo che ho un'app che gestisce la gestione dei casi dei pazienti. Una parte di questo sarebbe mantenere in esecuzione un elenco di note / attività sciolte sul paziente. Tradizionalmente lavorerei su questi come parte di qualunque area primaria gestiremmo la voce delle note: diciamo che andrebbero nella porzione CaseManager dell'interfaccia utente e come tali rientrerebbero nel contesto all'interno di CaseController (e successivamente, anche il modello e le viste sarebbero naturalmente "adiacenti" (per mancanza di parole migliori) a quel controller.

Altrove, potrei voler visualizzare un elenco / riassunto di note e magari un popup rapido o altro. Questo in genere verrebbe gestito separatamente dall'implementazione di CaseController di cui sopra.

Cosa mi piacerebbe fare

Ora, vorrei prendere questo editor / display di Notes e trattarlo come una risorsa incorporata in qualsiasi altra visualizzazione che voglio. Creerò quindi un controller Notes con specifici modelli Notes e viste Notes (per conservare tutte quelle cose piacevolmente incapsulate), quindi quando voglio visualizzare il componente "note" nell'app da qualche parte, vorrei semplicemente inviare una richiesta a il controllore Notes di conseguenza.

Come tale, il mio CaseManager è ora "vincolato" al mio CaseController, ma quando l'utente fa clic sulla scheda Note, voglio attivare un'istanza di NotesController, passarla a un parametro rilevante o due, quindi lasciare che NotesController faccia il sollevamento pesante e restituire la risposta.

Altrove - non nel CaseManager - Potrei voler incorporare in modo simile questo componente Notes e gestirlo allo stesso modo: delegare l'elaborazione a una nuova istanza di NotesController e lasciare che faccia la sua cosa.

Cosa ho fatto

Precedentemente, ho gestito scenari "leggeri" come questo usando httpContext.Server.TransferRequest , che funziona molto bene nello spostare silenziosamente la richiesta e il suo contesto in una nuova azione del controller.

Ho seguito lo stesso percorso per quello che mi piacerebbe fare ora - quindi il mio metodo di tabulazione di CaseController ora dice return MyTransferResultWrapper("/Notes/?id=1234");

Funziona, ma ...

Cosa non mi piace

... sembra sbagliato. Non ha comunque giusto . Funziona, ma mi odora, per ragioni che non riesco a mettere bene le dita. Sembra che se dovessi evolvere questo approccio come una "tattica fondamentale" per affrontare questo in questa nuova applicazione (che ha molti di questi casi di riutilizzo), starei davvero manipolando e lavorando contro la corrente in termini per aggirare i contesti dei controller e in generale solo fare cose che forse il framework non è mai stato realmente progettato per gestire.

Qualcuno potrebbe essere in grado di offrire qualche consiglio su un approccio sonoro per questo tipo di cose? Molte grazie ...

    
posta jleach 04.10.2016 - 04:50
fonte

2 risposte

1

Questo può essere realizzato con viste parziali.

La vista parziale accetta un Id di riferimento che viene utilizzato per ottenere le note per un particolare genitore (come Case nell'esempio) e quindi la vista parziale torna sempre al NotesController per recuperare i dati.

Ora puoi posizionare la vista parziale su qualsiasi pagina, collegare l'ID di riferimento e dovrebbe funzionare.

Vedi questo per iniziare.

    
risposta data 16.09.2018 - 09:11
fonte
0

Puoi chiamare il tuo controller Notes da altre viste per inserire una vista parziale

@Html.Action("action", "controller", parameters)

Tuttavia, come dici tu, se nella vista parziale hai pulsanti che chiamano ulteriori azioni questo diventerà problematico e io non lo consiglio

Meglio spostare il controllo sul lato client e avere un controller Api con le query e le azioni pertinenti.

Il codice lato client può quindi essere compilato e intraprendere azioni sul controllo senza complicare il ciclo di vita della pagina e puoi riutilizzare la stessa vista parziale con i controlli di base html e javascript in qualsiasi punto dell'applicazione.

    
risposta data 25.07.2018 - 17:43
fonte

Leggi altre domande sui tag