2011-05-16 14 views
11

Estoy trabajando en un marco CSS que puedo incluir en otros proyectos como paquete NuGet.¿Por qué Razor no puede ver ViewBag, Url.Content, etc. cuando la página de diseño está fuera ~/Views/Shared?

mantener las cosas limpias, todo el marco - vistas, estilos, imágenes y páginas maestras/páginas de diseño - se almacena en ~/CssThing/

funciona perfectamente con el WebForms vista motor, pero cuando muevo _layout.cshtml el archivo en ~/CssThing/y luego modificar mi página de la maquinilla de afeitar decir:

@{ 
Layout = "~/CssThing/_layout.cshtml"; 
} 

que comienza a quejarse de que ViewBag no está definida, o que The name 'Url' does not exist in the current context, o varios otros fragmentos de rarezas que sugieren que la vista es ya no hereda de la clase base adecuada.

¿Cómo puedo hacer que funcione?

NOTA: El motivo por el que todo se divide de esta manera es que no hay manera de forzar a NuGet a sobrescribir el código existente, y no hay forma de girar una aplicación web MVC3 vacía sin recoger todas las referencias de jQuery, etc. que arriesgar que mi framework se despliegue a medias porque la mitad de los archivos ya estaban presentes, lo mantengo todo separado por completo.

Respuesta

9

Compruebe que tiene un archivo web.config en el nuevo directorio de vistas. Lo mejor es copiar el creado por el proyecto predeterminado en Vistas. Este web.config define la configuración de Razor como la clase base de la página predeterminada y qué espacios de nombres están disponibles implícitamente. Esos espacios de nombres definen qué ayudantes de HTML puede usar.

+0

Impresionante. Gracias. –

+0

Eres el hombre –

+0

genial. gracias –

4

Debe especificar manualmente @inherits WebViewPage, o agregar default Web.config section (que establece el tipo de base) a la carpeta con las vistas.

Cuestiones relacionadas