Come è possibile accedere a un'istanza del controller dalla vista? Per esempio. Ho un HomeController
che restituisce la mia vista Index
. All'interno di quella vista voglio accedere all'istanza HomeController
che ha creato la vista. Come lo faccio?ASP.NET MVC: visualizzazione dell'istanza del controller di accesso
risposta
ViewContext.Controller, e avrete bisogno di lanciarlo.
<% var homeController = ViewContext.Controller as HomeController; %>
Questo è coperto con qualche ruga in più in post Asp.Net MVC: How do I get virtual url for the current controller/view?.
EDIT: Questo per aggiungere un po 'di carne alla raccomandazione di Mark Seemann di mantenere la funzionalità fuori dalla vista quanto più umanamente possibile. Se si utilizza il controller per determinare il markup della pagina sottoposta a rendering, è possibile utilizzare il metodo Html.RenderAction(actionName, controllerName)
. Questa chiamata genererà l'azione come se fosse una richiesta separata e includesse la sua visualizzazione come parte della pagina principale.
Questo approccio aiuterà a rafforzare la separazione delle preoccupazioni perché il metodo di azione reindirizzato può fare tutto il lavoro pesante rispetto alle regole di presentazione. Sarà necessario restituire una vista parziale per funzionare correttamente all'interno della vista principale.
A mio parere, è necessario prendere in considerazione un progetto in cui la vista non ha bisogno di conoscere il controller. L'idea è che il controllore si occupi della richiesta, evoca un modello e consegna il modello alla vista. A quel punto, il lavoro del Controller è terminato.
Penso che sia un'indicazione di un difetto di progettazione se la vista deve sapere qualcosa sul controller. Puoi condividere di più su ciò che stai cercando di realizzare?
Spesso trovo che quando si ha a che fare con framework ben progettati (come il framework MVC), se si ha l'impressione che il framework ti stia combattendo, probabilmente stai affrontando il compito nel modo sbagliato. Questo mi è successo molto, e fare un passo indietro e chiedermi cosa stia davvero cercando di ottenere porta spesso a nuove intuizioni.
+1 per quello. Se sono necessarie classi di utilità, dovrebbero di solito entrare nel ViewModel o in un'entità completamente separata, poiché il ciclo di vita dei controllori dovrebbe terminare con il "ritorno". –
Mark: Ho aggiunto alla tua discussione un po 'nel mio stesso post. +1 –
+1 anche da parte mia. Ci ho pensato. Quello che sto facendo è che ho una vista parziale, simile a LogOnUserControl dal normale progetto di avvio per ASP.NET MVC. Visualizza un nome utente (ma non proveniente dal contesto della pagina/IPrincipal - è personalizzato). Il mio controller ha già un servizio che è in grado di fornire il nome utente, quindi preferisco prendere l'istanza dal controller invece di ripetere l'istanziazione nella vista.Non sto usando il modello perché mi piacerebbe approfittare del normale ritorno View() e non incorrere in problemi (ricordate, questo è condiviso, quindi mi servirebbe una classe di base VM ecc. – Alex
- 1. Esegui l'azione del controller MVC senza visualizzazione?
- 2. Accesso all'elenco di controller/azioni in un'applicazione ASP.NET MVC
- 3. ASP.NET MVC 3 _Layout.cshtml Controller
- 4. ASP.NET MVC Visualizzazione URL predefinita
- 5. Accesso alle impostazioni dell'applicazione da ASP.Net Visualizzazione MVC
- 6. ASP.NET MVC Autentica prima del controller istanziato
- 7. asp.net mvc controller generico
- 8. Controller MVC IoC e ASP.NET
- 9. Controller asincrono in ASP.NET MVC
- 10. ASP.NET MVC controller azioni design
- 11. Svantaggi del motore di visualizzazione di Webforms ASP.net MVC?
- 12. ASP.NET MVC Controller aggiungendo disabilitato
- 13. ASP.NET MVC - Respository/Service/Controller
- 14. ASP.Net MVC Controller Namespace array
- 15. Fabbrica controller ASP.NET MVC 6
- 16. Passing informazioni tra controller in ASP.Net MVC-
- 17. ASP.NET MVC - Rimozione del nome del controller dall'URL
- 18. ASP.NET MVC Controller Ciclo di vita
- 19. Come modificare il nome del controller MVC di ASP.NET nell'URL?
- 20. ASP.Net MVC Alternative Accesso all'identità
- 21. ASP.NET MVC: accesso a una proprietà del controller in un ActionFilter
- 22. Gestione delle eccezioni nel controller (ASP.NET MVC)
- 23. Come caricare un altro controller di visualizzazione dal file di implementazione del controller di visualizzazione corrente?
- 24. Condivisione del codice tra i controller MVC ASP.NET
- 25. ASP.NET MVC - Esegue l'azione del controller senza reindirizzamento
- 26. ASP.NET MVC - Mock Membership per Controller Test
- 27. ASP.NET MVC - Azione corrente dal codice del controller?
- 28. Visualizzazione della versione del progetto nell'applicazione ASP.NET MVC Core (RC2)
- 29. modifica convenzione nome controller in ASP.NET MVC
- 30. Test controller unità ASP.NET MVC con HttpContext
Come mai la risposta a questo non è "non dovresti" (c.f. https://stackoverflow.com/q/9562214/1739000)? –