Uso de VirtualPathProvider personalizado para cargar vistas incrustadas que heredan una WebViewPage personalizada

Similar a esta pregunta Estoy usando un VirtualPathProvider personalizado para recuperar vistas que están incrustadas en dlls. si no pongo @inherits System.Web.Mvc.WebViewPage en mi vista me sale este error:

The view at '~/Views/Home/Index.cshtml' must derive from ViewPage, ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>.

Estoy usando una BaseViewPage personalizada que hereda de WebViewPage. Antes de comenzar a usar este VirtualPathProvider personalizado, la configuración de la nueva página base en web.config funcionó. Ahora, si trato de heredar mi clase personalizada en la página con @inherits My.BaseViewPage Me sale el mismo error que el anterior.

Para completar, agregaré que la página comienza a compilarse si heredo de WebViewPage, pero arroja un error porque hay un código que espera que la vista tenga propiedades de BaseViewPage.

preguntado el 12 de junio de 12 a las 22:06

2 Respuestas

Resulta que el problema tenía que ver con el motor de visualización que estaba usando. Para que VirtualPathProvider funcione, reemplacé el motor de vista con uno personalizado que agregaba las ubicaciones de vista que necesitaba. Accidentalmente heredé de WebFormsViewEngine en lugar de RazorViewEngine por eso el error que seguía recibiendo era para ViewPage en lugar de WebViewPage. Ahora que todo está resuelto, mi página de vista base personalizada funciona bien.

Respondido el 15 de junio de 12 a las 20:06

¡Ah, me alegro de haber encontrado esta respuesta! :) - Karan

Hmmm ... ¿es posible que la clase base no se resuelva correctamente desde su dll?

Si ese es el caso, lo que debe hacer es agregar un controlador de resolución de ensamblaje/tipo personalizado en... (desde la memoria) AppDomain.AssemblyResolve: en ese controlador, querrá obtener el tipo apropiado de su dll y devuélvelo.

Puramente una conjetura, desafortunadamente, en mi teléfono, por lo que las capacidades de investigación son limitadas.

Respondido el 15 de junio de 12 a las 19:06

Gracias por responder. Casi me fui por esta ruta, pero el solución resultó ser una simple instancia de PEBKAC. - ashanán

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.