El nombre 'modelo' no existe en el contexto actual en MVC3

119

Agregué una página cshtml en un proyecto. Cuando traté de agregarle la siguiente declaración, aparece un error: "El nombre 'modelo' no existe en el contexto actual".

@model xyz.abc.SomeClass

Revisé las referencias, todas están en su lugar. Agregué un web.config en la carpeta de vista, pero eso no lo solucionó.

¿Hay algo que me esté perdiendo?

user602737
fuente
Si está buscando una solución MVC4, la respuesta de Adam es válida, debe encontrar el número de versión correcto en su web.config principal y usar el mismo aquí. MVC4 Views Folder web.config faltaba la línea <host> y copiaba una de la raíz web.config (podría tener otros valores diferentes, así que verifique el suyo) y colóquelo en Views. Luego cerramos el proyecto y lo recargamos en Visual Studio y funcionó.
Farrukh Subhani

Respuestas:

238

Actualización: si está utilizando una versión más reciente de MVC, se aplica el mismo proceso, solo asegúrese de usar el número de versión correcto en la <host>línea web.config .

Bueno, me encontré experimentando lo mismo que tú, y después de investigar un poco más, descubrí cuál es el problema.

Debe incluir el archivo MVC3 web.config predeterminado para la carpeta Vistas. MVC3 tiene dos: uno en la raíz de su aplicación y otro en la carpeta de vistas. Tiene una sección para espacios de nombres incluidos. Asegúrate de que el tuyo se parezca a esto:

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

Le sugiero que cree un nuevo proyecto MVC3, luego simplemente copie el web.config creado para usted en su carpeta de vistas.

Importante Una vez que haya hecho eso, debe cerrar el archivo y volver a abrirlo. ¡Voila! Intellisense!

Adam Terlson
fuente
1
No puedo marcar esto como la respuesta, pero este también era mi problema. Olvidé agregar estas secciones al web.config.
Dave
Sí, desearía poder marcar la tuya como la respuesta. Estuve atascado en esto por un tiempo (me di por vencido después de que falló mi primer intento de convertirme a Razor), y este fue el problema desde el principio. ¡Gracias!
Brian Donahue
3
No me funciona. O, al menos, a veces obtengo intellisense y otras veces no, aunque tengo todo esto configurado en web.config en la carpeta Vistas.
Tom Lianza
¡Muchas gracias! ¡Me salvó el día!
Sergey
9
asegúrese de actualizar a la última versión (para MVC 5 aquí) en su MAINarchivo web.config<add key="webpages:Version" value="3.0.0.0" />
Simon_Weaver
30

Me encontré con este mismo problema cuando creé una nueva área para organizar mis páginas. Mi estructura se veía así:

Proyecto Web

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
- [] Controllers
- [] Views
    - Web.config
- Web.config

Las vistas creadas en la carpeta Vistas en WebProject funcionaron bien, pero las vistas creadas en NewArea arrojaron el siguiente error:

El nombre 'modelo' no existe en el contexto actual.

Para solucionar esto, copié el archivo web.config en la carpeta Vistas en WebProject a la carpeta Vistas en NewArea. Vea abajo.

Proyecto Web

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
            - **Web.config**
- [] Controllers
- [] Views
    - Web.config
- Web.config

Me encontré con esto porque creé manualmente esta nueva área usando Agregar -> Nueva carpeta para agregar las carpetas. Debería haber hecho clic con el botón derecho en el proyecto y haber seleccionado Agregar -> Área. Entonces Visual Studio se habría encargado de configurar el área correctamente.

Paul Syfrett
fuente
2
+1 ... Acabo de notar que por alguna razón no se incluyó web.config, me alegro de haber encontrado tu respuesta para resolver mi problema
pollirrata
2
Me doy cuenta de que esto es antiguo, pero en realidad tuve el mismo problema hoy, así que quería agradecer esta respuesta. :)
Ricky Mutschlechner
Yo también tuve el mismo problema y una solución similar. Mi Views/Web.configestaba haciendo referencia a la System.Web.Mvc.MvcWebRazorHostFactoryversión 5.0.0.0, y tenía un Área de terceros que hacía referencia a v4.0 y las vistas cooperaban. Volví Views/Web.configa v4.0 y todo funcionó.
Códigos con Hammer
fue específicamente su comentario sobre la sobrescritura de web.config con el de la carpeta Vistas lo que me ayudó a solucionar este problema. simplemente hacer que los contenidos sean exactamente iguales no funciona por alguna razón loca. AAARRRGGGHHH! ;)
Ryan Vettese
En mi caso, utilizo robocopy para sincronizar la versión local con la versión del servidor, excluyendo todos los archivos web.config. sin el archivo web.config en la versión del servidor, aparecerá este error.
Will Wu
11

Si sus vistas están en un ensamblado de biblioteca de clases, lo cual es útil para reutilizar vistas compartidas entre proyectos, entonces hacer lo que sugiere Adam podría no ser suficiente. Todavía tenía problemas incluso con eso.

Pruebe esto en su web.config en la raíz de su proyecto:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
</configuration>

Y esto en web.config en su carpeta de vistas:

<?xml version="1.0"?>

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>

  <system.web>
    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>
</configuration>

Esto funcionó para mí. Ahora tengo intellisense y no tengo errores de compilación en mis vistas en un proyecto que no es MVC al que luego puedo hacer referencia desde varios sitios web MVC.

Greg Jackman
fuente
1
¿Es esto para los archivos web.config en su proyecto web o los archivos web.config en su biblioteca de clases?
theJerm
7

Me encontré con este problema cuando inadvertidamente tuve una copia del archivo de vista (About.cshtml) para la ruta / about en el directorio raíz. (No la carpeta de vistas) Una vez que moví el archivo fuera de la raíz, el problema desapareció.

James Lawruk
fuente
1
¡Gracias! Me he vuelto loco con el mismo problema y esta fue la respuesta ;-)
Rob
¡Frio! Recuerdo haberme vuelto loco también. :)
James Lawruk
Tenía algunos archivos .cshtml en una carpeta en el directorio raíz, lo que provocó que solo fallara la carpeta en mis vistas ... while (true) {bashHeadToWall; }. Gracias.
matt.j.crawford
7

Tuve problemas similares al usar VS2012 y VS2013.
Agregar la siguiente línea a <appSettings> en el web.config principal funcionó:

<add key="webpages:Version" value="3.0.0.0" />

Si la línea ya estaba allí pero decía 2.0.0.0, cambiarla a 3.0.0.0 funcionó.


fuente
Ese fue mi problema también después de realizar una actualización de MVC. Dijo 2.0.0.0, al cambiar a 3, funcionó.
FerX32
6

Actualización: 5/5/2015 Para su proyecto MVC 5, debe configurar la versión 5.0.0.0 en su /views/web.config

<system.web.webPages.razor>
     <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</system.web.webPages.razor>
phanf
fuente
1
¡Sí, encontré la versión 5.2.0.0 que está causando el problema, pero cambiarla a 5.0.0.0 lo solucionó! Gracias.
vendettamit
5

Mientras declara el modelo en la parte superior de la vista usando un código como este:

@model MyModel

debe escribir en mayúscula sus referencias a continuación, por ejemplo:

@Html.Encode(Model.MyDisplayValue)

Creo que un web.config faltante en la carpeta Vistas sería la causa principal de esto, pero si se soluciona y el problema persiste, verifique que esté usando Model , no model para hacer referencia a él en la fuente.

Bork Blatt
fuente
1
Esto resuelve el error cuando el problema es que está intentando hacer referencia a su modelo en su propio código en la vista, como cuando
crea
3

También me encontré con este problema. Mis circunstancias fueron un poco diferentes.

  1. Una de mis carpetas de vista se movió accidentalmente al directorio raíz de mi proyecto. Esto llevó a la ruta que project_root/SignUp/ViewNamecoincidía antes project_root/Views/SignUp/ViewName. Esto provocó el@model error.

  2. Después de volver a mover las vistas a la ubicación adecuada, el directorio se recreó de alguna manera en la raíz del proyecto. Esta vez, vacío. /SignUp/ViewNamefuncionó, pero /SignUp/arrojó un 403 - Forbidden: Access is denied.error. Se debe eliminar toda la carpeta de la raíz del proyecto.

Espero que esto ayude a alguien. Pasé horas creyendo que el problema fue causado por nuestra reciente actualización de MVC 3 a MVC 4. Solo una nota: los problemas de actualización solo deberían ocurrir entre MVC 2 y MVC 3. Si ve este problema en versiones posteriores, probablemente no se deba a la potenciar.


fuente
2

Me tomó años resolver este problema, pero finalmente espero haberlo resuelto en MVC, que es similar:

He reinstalado ASP.NET 4.5 ( http://www.asp.net/downloads )

He seguido el tutorial de actualización en http://www.asp.net/whitepapers/mvc4-release-notes

PERO este párrafo mencionado es incorrecto para mí

System.Web.Mvc, Version=4.0.0.0
System.Web.WebPages, Version=2.0.0.0
System.Web.Helpers, Version=2.0.0.0
System.Web.WebPages.Razor, Version=2.0.0.0

Como tengo Razor en System.Web.Razor , cambié el espacio de nombres de Razor a System.Web.Razor.

Agregue esto a su web.config

<appSettings>
  <add key="webpages:Version" value="2.0.0.0" />
</appSettings>

He agregado la referencia de ensamblaje a todos estos ensamblajes anteriores

Busque el elemento ProjectTypeGuids y reemplace {E53F8FEA-EAE0-44A6-8774-FFD645390401} por {E3E379DF-F4C6-4180-9B81-6769533ABE47}.

Eso es todo.

Tomas Kubes
fuente
1
La adición de appsettings a webconfig lo resolvió por mí. Aunque creo que <add key="webpages:Version" value="2.0.0.0" />es el factor determinante, la otra configuración no es necesaria.
Zapato
1
para MVC 5 esto debe ser, 3.0.0.0pero sí, ¡esto es muy importante!
Simon_Weaver
2

Es un error horrible pero:

Asegúrese de tener archivos Web.config en su Vista en Remoto . Tal vez omitió subirlo por los filtros de su programa Ftp.

Pcodea Xonos
fuente
2

Faltaba web.config en Areas / MyArea / Views / web.config. Una vez agregado, funcionó bien. Esto fue con MVC 5 y .NET4.5

Víctor
fuente
El mío también faltaba, con la ayuda de este sitio, lo hice funcionar nuevamente. foros.asp.net/t/…
Publicador
0

También hay otra razón. En mi caso, había copiado un archivo index.cshtml en la carpeta raíz web (fuera de la carpeta Vistas) como copia de seguridad del servidor remoto.

Entonces, seguí cambiando mi /views/web.config, seguí cambiando mi /views/home/index.cshtml y el error siguió sucediendo ... hasta que descubrí el /index.cshtml fuera de la carpeta de vistas, lo eliminé y seguro, ¡todo volvió a la normalidad!

Nestor
fuente
0

Me encontré con el mismo problema, pero en mi caso, lo único que había cambiado es que había desinstalado Visual Studio 2012 e instalado Visual Studio 2013. Abrí nuestra solución, pero seguía recibiendo el mismo The name 'model' does not exist in current contexterror en todas las vistas de Razor.

Mi compañero de trabajo sugirió buscar actualizaciones para VS2013. Después de instalar VS2013 Update 1 , dejé de recibir este error.

John Washam
fuente
1
Recibo este error con VS2013 Update 2 . Con la Actualización 1 estaba funcionando bien. Todavía no he podido encontrar una solución. Intenté desinstalar la Actualización 2, pero eso provocó que VS se bloqueara después de abrir un archivo cshtml.
iheartcsharp
Tengo el mismo problema con VS2013 Update 2.
EricP
0

Verifique su archivo de configuración en el directorio de vistas. en el agregar la clave para MVC 4/5

sansalk
fuente
0

Reinstalar el nuget lo resolvió por mí.

PM> Paquete de instalación Microsoft.AspNet.Razor -Version 3.2.3

pixelagent
fuente
0

Para mí, este fue el problema. Todo este bloque faltaba en la sección.

  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
  </assemblies>
Kevin oscuro
fuente
0

Tengo el mismo problema después de actualizar los paquetes. Hice todo lo que ha escrito anteriormente en este tema, pero el rojo subyacente de la palabra clave modelo no ha desaparecido. Más tarde, encontré una solución: simplemente eliminé la carpeta 'paquete' del directorio de mi proyecto y la reconstruí, mientras tanto, permitió a NuGet restaurar los paquetes faltantes. ¡Refrescado y listo!

Peter.k
fuente
0

Compruebe que su archivo web.config debe existir en los archivos publicados

Arash Farahani
fuente
0

Estaba enfrentando el mismo problema y luego encuentro una solución. La solucion es:

  1. Cerrar Visual Studio
  2. Eliminar el archivo SUO
  3. Reinicie Visual Studio

El archivo .suo es un archivo oculto en la misma carpeta donde existe el archivo de solución .svn . ¡Espero que funcione!

Arsman Ahmad
fuente