2009-04-01 14 views
5

Sto cercando di imparare il nuovo framework ASP .NET MVC e vorrei conoscere la procedura migliore per l'utilizzo di UserControls.ASP .NET MVC corretta architettura UserControl

Capisco che è possibile eseguire il rendering di UserControl come parziale e passare i dati da un controller. Idealmente penserei che abbia senso non avere un codice dietro il file in quanto ciò crea la tentazione di infrangere le regole MVC.

Fornirò un esempio in cui non capisco come gli UserControls si adattino al modello.

Ho un UserControl che mostra le ultime tag (molto simile a StackOverflow). A differenza di StackOverflow I desidera visualizzare questo UserControl su tutte le mie pagine. Se ho un controller , dico QuestionController che è pensato per gestire azioni da alcune domande, ad es. view e dettaglio, vuol dire che devo recuperare i dati nel QuestionController e quindi passarlo a UserControl?

Se creo un altro controller dire SearchController poi avrei dovuto replicare la stessa funzionalità per Ricevi gli ultimi tag di passare ad un parziali di nuovo. Questo non significa che i due controller diversi stanno facendo cose extra che non erano originariamente destinate a fare?

risposta

4

Se viene visualizzata l'UserControl in ogni pagina, quindi un modo per affrontare questo sarebbe quella di utilizzare un controller di base da cui tutti i controller derivano e generare il Viewdata per l'UserControl sovrascrivendo il metodo OnActionExecuting e mettendo la logica Là. Se il tuo UserControl è meno pervasivo, ma ancora frequentemente utilizzato in tutto il sito, puoi estendere ActionFilterAttribute e fare in modo che il filtro generi i dati necessari. Questo attributo può essere utilizzato per decorare i controller o le azioni che generano viste che utilizzano UserControl.

Presumo in tutto questo che i dati per UserControl siano indipendenti dall'azione invocata. Se esiste una dipendenza, è probabilmente meglio spingere la logica in una classe (o classi, magari usando Strategia) e rendere esplicita la generazione dei dati in ogni azione o controller (tramite l'esecuzione forzata di OverActionExecuting).

-1

Si può anche considerare di mettere le classi del modello in una gerarchia. La classe superiore (o una delle classi superiori) conterrà i dati necessari per i controlli pervasivi dell'utente. Quindi è possibile caricare questi dati di uso comune in una classe di controller di base.

4

In alternativa, con ASP.NET MVC 2 è ora possibile utilizzare RenderAction per chiamare un'azione di controller completamente nuova che può recuperare i dati. Ciò rende il tuo codice molto più modulare ed è più chiaro da dove provengono i dati.

+0

oooo, sembra proprio quello di cui ho bisogno! – Alex

Problemi correlati