2011-05-26 32 views
16

Acabamos de obtener un nuevo servidor de Windows 2008 R2 y estoy tratando de configurar un sitio de MVC 3 en IIS 7.5 con el Razor View Engine. Recibo un error extraño cuando accedo a la ruta predeterminada.No se pudo encontrar la página de diseño "{path}"

El diseño de la página "~/Views/Shared/_Layout.cshtml" podría no se encuentran en la siguiente ruta: "~/views/Común/_Layout.cshtml".

Esto es extraño porque establece explícitamente la Disposición desde dentro /views/home/index.cshtml así:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

estoy 100% seguro de que el /views/shared/_layout.cshtml existe en el sistema de archivos. Aquí hay una captura de pantalla.

enter image description here

Si quito el Layout = "~/Views/Shared/_Layout.cshtml"; desde mi punto de vista, la página hará que el contenido de /home/index.cshtml por sí mismo (sin ningún tipo de código de _Layout.cshtml). También intenté configurar el diseño usando _ViewStart.cshtml.

¿Alguien sabe por qué MVC no podría "encontrar" el archivo de diseño? Este sitio web funciona perfectamente bien cuando se ejecuta en el servidor web incorporado para Visual Studio.

Aquí está mi seguimiento de la pila:

[HttpException (0x80004005): The layout page "~/Views/Shared/_Layout.cshtml" could not be found at the following path: "~/Views/Shared/_Layout.cshtml".] 
    System.Web.WebPages.WebPageExecutingBase.NormalizeLayoutPagePath(String layoutPage) +204956 
    System.Web.WebPages.WebPageBase.PopContext() +150 
    System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +384 
    System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +33 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +784900 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +265 
    System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +784976 
    System.Web.Mvc.Controller.ExecuteCore() +159 
    System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335 
    System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62 
    System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20 
    System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +453 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +371 

Respuesta

21

Parece que es probable que tenga un problema de permisos. Con la información que ha proporcionado, parece ser la causa más probable de no poder encontrar el archivo _Layout.cshtml.

Con Server 2008 e IIS 7, el grupo de aplicaciones tiene su propia identidad utilizada para las ACL (denominada IIS AppPool {App Pool Name}), y estas identidades forman parte del grupo IIS_IUSRS. Además, su directorio predeterminado inetpub/wwwroot tendrá permisos de lectura para el grupo IIS_ISRS. Por lo tanto, si no obtiene los permisos que necesita, creo que el grupo de aplicaciones no se está ejecutando con la identidad correcta.

Una de las razones por las que la identidad puede ser incorrecta es la configuración para la identidad del usuario de Autenticación anónima. Vaya al control de Autenticación para el sitio (o el servidor completo) y edite la regla de Autenticación Anónima para que se ejecute como la Identidad del grupo de aplicaciones.

Esto es un poco una conjetura, pero parecía this fellow had nearly the exact same issue.

IIS Anonymous Authentication user identity screen

+0

Ding ding ding! Gracias. – jessegavin

+0

lolz, no hay problema ;-) –

+0

¿El mío no está buscando en absoluto la carpeta de vistas compartidas, ideas? – Maslow

2

Como qbantek encontró, para mí esto estaba relacionado con la acción construye una lista de _layout.cshtml se establece en ninguno.

La razón por la que se configuró como none es que comencé con una plantilla de proyecto mvc vacía y agregué manualmente el archivo _layout.cshtml al proyecto.

Así que una lección aprendida, cuando comienza con una plantilla de proyecto vacía, y agrega el archivo de diseño manualmente, también debe establecer la acción de compilación manualmente.

0

Este problema puede ser sobre permisos de seguridad a veces. Asegúrate de tener permiso para leer/escribir en carpeta/archivo.

0

Mi problema era el archivo .suo que contenía Old filepaths. Cerré VS, borré mi archivo suo, volví a abrir VS y funciona bien.

Cuestiones relacionadas