www what visual studio net mvc5 mvc framework asp and .net asp.net-mvc asp.net-mvc-2 strongly-typed-view

.net - visual - what is mvc 5



ASP.NET MVC escribió fuertemente el error de compilación de vista (4)

Esta es una extraña. Cambié algo (no estoy seguro de qué) y ahora la vista de mi aplicación no se compila en tiempo de ejecución.

La vista en sí está fuertemente tipada:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyNamespace.OperatorModel>" %>

Cuando visito la página, no compila, diciendo:

CS1061: ''objeto'' no contiene una definición para ''Log'' y no se puede encontrar ningún método de extensión ''Log'' que acepte un primer argumento de tipo ''object'' (¿falta una directiva using o una referencia de ensamblado?)

Bastante error estándar. La línea de código fuente correspondiente es:

<%= Html.HiddenFor(model => model.Log) %>

Cuando miro el código generado por el compilador, veo que la clase base de la vista no está fuertemente tipada:

[System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()] public class views_operator_create_aspx : global::System.Web.Mvc.ViewPage, // NOT STRONGLY TYPED System.Web.SessionState.IRequiresSessionState, System.Web.IHttpHandler {

Entonces mi pregunta es, ¿qué está causando que el compilador de vista ignore mi atributo Inherits en la definición de vista?

Debo señalar que otras vistas en el mismo controlador están funcionando, y tienen exactamente la misma declaración de página que he mostrado anteriormente.

EDITAR ¿Alguien sabe dónde vive el archivo de código fuente generado, suponiendo que se conserve en alguna parte?

EDITAR Encontré al culpable (en mi respuesta a continuación) pero no tengo idea de por qué está sucediendo esto. Si alguien puede explicar, ¡lo agradecería!


¿Hace referencia al OperatorModel correctamente en su Web.Config? Eso le permitirá hacer referencia explícita a OperatorModel .

<namespaces> <add namespace="My.Namespace"/>

alternativamente, puede cambiar su valor de Inherits a:

Inherits="System.Web.Mvc.ViewPage<My.Namespace.OperatorModel>"

Además, al pasar un objeto modelo a la vista, asegúrese de marcar nulo o devolver un OperatorModel vacío:

return View(operatorModel ?? new OperatorModel() { Text = "I can has not found!" });


Me parece que cuando tengo errores totalmente extraños como este, a veces, si elimino la copia oculta de todos mis archivos, se aclarará. Lo encontrarás en:

%SYSTEMROOT%/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files

Reemplace cualquier versión del Framework que esté utilizando en la línea anterior. Borre todos los archivos que corresponden a su proyecto (o simplemente elimine todo en el directorio).

Es posible que deba cerrar su servicio w3p para asegurarse de que suelta todos los archivos y puede eliminarlo.

Además, creo que encontrará el código fuente generado que está buscando allí.


No eliminaste ese archivo mágico especial web.config que vive en la raíz de tu carpeta / Views, ¿o sí?

[Esto me atrapa al menos una vez al mes]


Ok, así que reduje mi vista a esto:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyNamespace.OperatorModel>" %> <%@ Import Namespace="MyNamespace.Data" %> <asp:Content ContentPlaceHolderID="MainContent" runat="server"> <%= GetType() %><br /> <%= GetType().BaseType %><br /> <%= GetType().BaseType.BaseType %> </asp:Content>

La salida fue, incluso con todas las áreas de contenido vacías:

ASP.views_operator_create_aspx
System.Web.Mvc.ViewPage
System.Web.UI.Page

Pero si elimino la línea <%@ Import , obtengo esto:

ASP.views_operator_create_aspx
System.Web.Mvc.ViewPage`1 [MyNamespace.OperatorModel]
System.Web.Mvc.ViewPage

No tengo idea de por qué la importación debería causar que la página ya no esté fuertemente tipada. ¿Alguien puede explicar? Cualquier consejo sobre cómo depurar o rastrear la compilación sería bueno. Es genial poder seguir codificando ahora, pero este no es un final muy satisfactorio para el problema.