Ho un motore di visualizzazione personalizzato sviluppato internamente. Nello stesso progetto, vorrei usare Razor per alcune pagine e il mio motore personalizzato per alcune pagine. In che modo il framework MVC sceglie quale motore utilizzare? A proposito, il mio motore personalizzato non richiede alcun modello, rende pagine basate su meta-dati dal database. Per il mio motore personalizzato non voglio impostare alcun file modello. Quello che mi aspetto è che ci dovrebbe essere un modo per guidare il framework per usare determinati motori in base al nome del controller e al nome dell'azione. Esiste questa flessibilità in MVC3?In che modo MVC3 sceglie quale ViewEngine utilizzare se ho più motori nella raccolta ViewEngines?
risposta
Il motore di visualizzazione deve implementare l'interfaccia IViewEngine. Dopo aver registrato il motore di visualizzazione con il metodo ViewEngines.Engines.Add()
, il framework MVC chiamerà FindView e FindPartialView ogni volta che è necessario un motore di visualizzazione per eseguire il rendering di una vista.
E 'assolutamente possibile per i motori di visione multipla operare fianco a fianco. Se non si desidera utilizzare il motore di visualizzazione in una situazione specifica, è possibile effettuare il return new ViewEngineResult(new string[0]);
da FindView
o FindPartialView
e MVC sceglierà un altro motore di visualizzazione. Se si desidera utilizzare il motore di visualizzazione, è necessario restituire un valore valido ViewEngineResult indicando la classe di visualizzazione (che sta implementando IView) a cui si desidera il risultato: Render.
Ci sono alcune specifiche con il parametro useCache
. Se vuoi saperne di più, c'è stata un'ottima presentazione sulla costruzione del tuo motore di visualizzazione al TechEd 2011 di Louis DeJardin. Puoi trovare il video di Writing an ASP.NET MVC View Engine su Channel9.
Penso che il modo più semplice sarebbe implementare uno IViewPageActivator
, http://bradwilson.typepad.com/blog/2010/10/service-location-pt11-view-page-activator.html e http://msdn.microsoft.com/en-us/library/system.web.mvc.iviewpageactivator(v=vs.98).aspx.
Penso che restituire null dal metodo Create
lo renderà in seguito predefinito al valore predefinito IViewPageActivator
. L'hai iniettato nel DependencyResolver
, http://bradwilson.typepad.com/blog/2010/10/service-location-pt5-idependencyresolver.html.
Potrebbe essere più semplice da utilizzare se si utilizza un framework di distribuzione delle dipendenze come NInject o Unity.
Sì. Sto usando un'iniezione di dipendenza con Unity. Puoi spiegare come può essere risolto implementando IViewPageActivator. Se aggiungi qualsiasi implementazione personalizzata a IViewPageActivator, anche in questo caso lo stesso problema che ho postato esiste anche qui. Posso avere più di un IViewPageActivator? Come configurare l'uno o l'altro? – Charasala
Non so se è possibile avere più di un IViewPageActivator, ma non dovrebbe essere difficile implementare quello personalizzato che lo risolva. Inoltre, penso che la restituzione di null causerà l'impostazione predefinita per dare il via. –
- 1. In che modo la compilazione sceglie quale funzione modello chiamare?
- 2. MVC Razor ViewEngine non thread-safe?
- 3. in che modo hdf sceglie un datanode per memorizzare
- 4. È possibile utilizzare più motori di template in Sails.js?
- 5. In che modo ScopedProxy decide quale sessione utilizzare?
- 6. In che modo SignalR decide quale metodo di trasporto utilizzare?
- 7. Quale raccolta utilizzare al posto dell'array 2D in Java?
- 8. In che modo il sistema sceglie il corretto Page Table?
- 9. Cosa succede se provo a utilizzare più core di quello che ho?
- 10. Quale versione del pacchetto ho?
- 11. C'è un modo per utilizzare più motori di vista con espresso + Node.js
- 12. Conversione della raccolta osservabile nella raccolta regolare
- 13. Quale dizionario sceglie GHC quando ne sono presenti più di uno?
- 14. Quale raccolta .NET fornisce la ricerca più veloce
- 15. caricamento di più immagini nella stessa forma con MVC3
- 16. Più thread che modificano una raccolta in Java?
- 17. Cambia @RenderBody in modo che punti a un'altra vista MVC3
- 18. Il modo più semplice per trasformare la raccolta in array?
- 19. Quando utilizzare i motori di template JavaScript?
- 20. In che modo Unity.Resolve sa quale costruttore usare?
- 21. Se c'è più di un certificato nel keystore di Jetty, come sceglie?
- 22. Quale versione di iText da utilizzare in modo che sia JasperReports e Grails rendering plugin funziona
- 23. Quale codice di stato HTTP è più adatto ai motori di ricerca durante un'interruzione pianificata?
- 24. Quale raccolta Java considera le permutazioni uguali?
- 25. ASP.net MVC ottiene viewengine corrente
- 26. modo migliore per testare se un tipo è una raccolta
- 27. In che modo Maven determina quale versione del plug-in utilizzare per i plug-in utilizzati dalla riga di comando?
- 28. In che modo Hive sceglie il numero di riduttori per un lavoro?
- 29. Come faccio a sapere se ho bisogno di "Attivazione HTTP WCF" nella mia applicazione?
- 30. modo più pulito per indicizzare una raccolta da una proprietà della voce di che si è una raccolta
Grazie Marco. "Se non si desidera utilizzare il motore di visualizzazione in una situazione specifica, si restituisce nuovo ViewEngineResult (nuova stringa [0]), da FindView o FindPartialView e MVC sceglierà un altro motore di visualizzazione.". Questo ha davvero funzionato bene. Ma il suo viaggio non necessario al mio motore personalizzato quando conosco esattamente quale motore usa in alcuni casi. Probabilmente i progettisti di MVC non hanno pensato a questa situazione. Grazie ancora! – Charasala