Tengo un motor de vista personalizado desarrollado internamente. En el mismo proyecto, me gustaría usar Razor para algunas páginas y mi motor personalizado para algunas páginas. ¿Cómo elige el framework MVC qué motor usar? Por cierto, mi motor personalizado no requiere ninguna plantilla, sino que genera páginas basadas en metadatos de la base de datos. Para mi motor personalizado no quiero configurar ningún archivo de plantilla. Lo que estoy esperando es que haya una manera de conducir el marco para usar cierto motor basado en el nombre del controlador y el nombre de la acción. ¿Existe esta flexibilidad en MVC3?¿Cómo elige MVC3 qué ViewEngine usar si tengo varios motores en la colección ViewEngines?
Respuesta
Su motor de vista debe implementar la interfaz IViewEngine. Después de que haya registrado su motor de visualización con el método ViewEngines.Engines.Add()
, la estructura MVC llamará a FindView y FindPartialView cuando necesite un motor de vista para representar una vista.
Es absolutamente posible que los motores de vista múltiple operen uno al lado del otro. Si no desea que su motor de visualización se use en una situación específica, return new ViewEngineResult(new string[0]);
de FindView
o FindPartialView
y MVC elegirá otro motor de visualización. Si desea que se use su motor de visualización, devuelve un ViewEngineResult válido que apunte a la clase de vista (que está implementando IView) que desea que Render el resultado.
Hay algunos detalles con el parámetro useCache
. Si desea saber más, Louis DeJardin realizó una presentación excelente sobre la creación de su propio motor de visualización en TechEd 2011. Puede encontrar el video de Writing an ASP.NET MVC View Engine en Channel9.
Creo que la manera más fácil sería implementar un IViewPageActivator
, http://bradwilson.typepad.com/blog/2010/10/service-location-pt11-view-page-activator.html y http://msdn.microsoft.com/en-us/library/system.web.mvc.iviewpageactivator(v=vs.98).aspx.
Creo que devolver nulo desde el método Create
lo hará más tarde predeterminado al predeterminado IViewPageActivator
. Lo inyecta en el DependencyResolver
, http://bradwilson.typepad.com/blog/2010/10/service-location-pt5-idependencyresolver.html.
Puede ser más fácil de usar si está utilizando un marco de inyección de dependencia como NInject o Unity.
Sí. Estoy usando inyección de dependencia con Unity. ¿Puede explicar cómo se puede resolver implementando IViewPageActivator? Si agrego alguna implementación personalizada a IViewPageActivator, nuevamente el mismo problema que publiqué también existe aquí. ¿Puedo tener más de un IViewPageActivator? ¿Cómo configurar uno o el otro? – Charasala
No sé si puede tener más de un IViewPageActivator, pero no debería ser difícil implementar uno personalizado que resuelva eso. Además, creo que si devuelves el valor nulo, se activará el predeterminado. –
- 1. Razor ViewEngine: ¿Cómo escapo del símbolo "@"?
- 2. ¿Qué CursorAdapter tengo que usar?
- 3. Cómo usar GIT cuando tengo varios archivos compartidos entre varios proyectos
- 4. ¿Por qué tengo que usar [ProtoInclude]?
- 5. Mostrar errores en Razor ViewEngine
- 6. ¿Qué elige, protegido o interno?
- 7. Colección Backbone.js con varios tipos
- 8. ¿Por qué tengo que usar $ (esto)?
- 9. En vb.net, si uso AddHandler, ¿Tengo que usar RemoveHandler?
- 10. ¿Cómo puedo probar expresiones regulares usando varios motores de RE?
- 11. ¿Cómo elige la compilación a qué función de plantilla llamar?
- 12. Qué línea se elige para informar en la excepción
- 13. ¿Qué tipo de colección debo usar?
- 14. Si tengo esta cadena en Python, ¿cómo la decodifico?
- 15. ¿Qué biblioteca de Singleton en BOOST elige?
- 16. Colecciones Java: ¿qué colección usar y cuándo?
- 17. Cómo usar la función de la biblioteca estática si no tengo el archivo de encabezado
- 18. ASP.net MVC obtener viewengine actual
- 19. ¿Qué determina si la tubería de Powershell desenrollará una colección?
- 20. GKSession: ¿qué sucede si tengo Bluetooth y Wi-Fi apagados?
- 21. jquery: ¿cómo sé si lo tengo?
- 22. ¿Cómo usar ReCaptcha con MVC3 y navaja?
- 23. ¿Por qué tengo sesión inestable en una aplicación MVC3 con servidores godaddy?
- 24. ¿Qué sucede si tengo dos asignaciones de servlet en web.xml que coinciden con una solicitud?
- 25. cómo usar la colección de listas para "foreach" en SSIS
- 26. ¿Por qué tengo que usar finalmente para cerrar recursos?
- 27. C#: cómo: para saber si tengo la codificación correcta
- 28. ¿Por qué tengo que usar close() para cerrar un archivo?
- 29. Cómo compilar todos los proyectos en la solución en una configuración específica (como si elige "Reconstruir solución")
- 30. colección Magento - filtro por varios campos
Gracias Marco. "Si no quiere que su motor de visualización se use en una situación específica, devuelve un nuevo ViewEngineResult (cadena nueva [0]); de FindView o FindPartialView y MVC elegirá otro motor de visualización". Esto de hecho funcionó bien. Pero es un viaje innecesario a mi motor personalizado cuando sé exactamente qué motor usar también en algunos casos. Probablemente los diseñadores de MVC no pensaron en esta situación. ¡Gracias de nuevo! – Charasala