Razor View arrojando "El nombre 'modelo' no existe en el contexto actual"

201

Después de una refactorización significativa en mi aplicación MVC 4, y Razor muestra este error al depurar Vistas:

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

Esta es la línea de código ofensiva:

@model ICollection<DataSourceByActive>

Sé que el uso de @modeles correcto.

¿Por qué está pasando esto? ¿Cómo puedo arreglarlo?

Kehlan Krumme
fuente
La clave está "en el contexto actual". En algún lugar no se abrió ni cerró un soporte ... Por lo tanto, su declaración no está en el contexto que usted cree que es.
Floris
1
¿Puede agregar su código de controlador junto con un marcado de muestra de lo que está tratando de hacer?
scniro
Posible duplicado de El nombre 'modelo' no existe en el contexto actual en MVC3
Michael Freidgeim

Respuestas:

245

Creo que ha estropeado el archivo web.config que se encuentra en la carpeta Vistas.

Cree un nuevo proyecto dirigido al mismo marco .NET y copie su archivo Views / web.config encima del que está en su proyecto actual. Esto solucionará tu problema.

Además, como comentó Dudeman3000, si tiene Áreas en su proyecto MVC, todas ellas Views\web.configtambién tienen archivos.

Anirudha Gupta
fuente
20
recuerde que si tiene Áreas en su proyecto MVC, ¡todas ellas también tienen archivos Vistas \ web.config!
Dudeman3000
66
Curiosamente mi web.config en el directorio de vistas estaba bien, pero el web.config del proyecto tenía una versión de páginas web de 2.0.0. La detección de error falso desapareció cuando lo hice 3.0.0.
William T. Mallard
43
This will fix your problem.No lo hizo.
Timwi
2
@AnirudhaGupta El de la pregunta.
Timwi
1
Había copiado un archivo web.config válido en mi carpeta Vistas pero no estaba incluido en el proyecto.
Wildcat Matt
104

Asegúrese de tener lo siguiente tanto en su sitio Web.configcomo Web.configen el directorio de vistas en la appSettingssección

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

Para uso MVC5:

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

(Y solo existe en el Web.configarchivo principal ).

Alex
fuente
14
¡Gracias! Para MVC5, el número de versión debe ser 3.0.0.0. (Y solo existe en el archivo principal Web.config).
xec
Esta es la respuesta correcta que diría, ya que intenté en todas partes cambiar la versión no, pero al final fue lo único que impedía que la inteligencia de la navaja funcionara.
Shivam Chopra
66
Esto funcionó para mí. Tuve que reiniciar Visual Studio después de este cambio para que todo funcione.
Ravvy
1
Tuve este problema con MVC 5, el problema era que la clave existía pero estaba apuntando a la versión en 2.0.0.0lugar de 3.0.0.0. Cambiar eso solucionó el problema. ¡Gracias!
vaindil
Usé esto y funcionó, pero solo lo agregué a las vistas web.config. Intellisense apareció justo después de un reinicio de VS.
Matt
48

Aquí esta lo que hice:

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

El archivo .suo es un archivo oculto en la misma carpeta que el archivo de solución .svn y contiene las Opciones de usuario de Visual Studio.

Mark Schultheiss
fuente
Sí, no hay ningún web.configarchivo para la ASP.NET Coreaplicación, por lo que esto funcionó para mí (también agregó algunas extensiones para mejorar la inteligencia).
VMAtm
2
Ni siquiera tuve que eliminar el archivo SUO. Acabo de cerrar y abrir Visual Studio.
Jim S
Visual Studio 2019: sin archivo suo, la eliminación de la .vscarpeta ayudó.
Štěpán Havránek
Gracias ... esto lo hizo por mí. .net Core 2.0 mvc app
roblem
2
Visual Studio 2019 aquí, cerrar y volver a abrir lo arregló para mí. Gracias.
JordanGW
26

Tuve el mismo problema, creé un nuevo proyecto y copié los archivos web.config según lo recomendado en la respuesta de Gupta, pero eso no me solucionó las cosas. Verifiqué la respuesta de Alex y Liam, pensé que esta línea debía haberse copiado de la nueva web.config, pero parece que el nuevo proyecto en sí no tenía esta línea (MVC5):

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

Agregar la línea al archivo views / web.config resolvió el problema para mí.

Tarek Shawadfy
fuente
Esto sucede si actualizaste de asp.net versión 4.0.0 a 4.5.1. En mi caso, mi principal web.config mostraba páginas web: Versión = 2.0.0.0 pero debería ser 3.0.0.0. La actualización de este valor solucionó el problema.
Veysel Ozdemir
15

Cambiar la siguiente línea en la carpeta web.config of view resolvió el mismo error.

De

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

A

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
vinayak hegde
fuente
1
Esto funcionó para mí también. Había actualizado la maquinilla de afeitar para admitir C # 6 y MVC también debe haberse actualizado. Verifique su System.Web.Mvcreferencia de ensamblaje para confirmar la versión principal que necesita.
James Wilkins
Yo tuve el mismo problema. la fijación de todos los MVC, Maquinilla de afeitar, etc. asambleas en web.config para x.0.0.0 puso las cosas que trabajan para mí otra vez
mamashare
@JamesWilkins Nice, trabajó para mí. Solo una cosa, elimine el archivo .suo de su proyecto después de eso y reinicie VS.
¡buena atrapada! Estaba enfrentando este problema después de actualizar de .net framework 4.0 a 4.6 y obviamente apuntando a una versión de ensamblaje incorrecta.
prashant
10

En mi caso, recientemente actualicé de MVC 4 a MVC 5, lo que arruina bastante el web.config. Este artículo fue de gran ayuda.

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web- api-2

La conclusión es que debe verificar todas las referencias de número de versión en su web.config y Views / web.config para asegurarse de que estén haciendo referencia a las versiones actualizadas correctas asociadas con MVC 5.

Justin Skiles
fuente
1
Si actualizó de MVC 4 a MVC 5, esta es la respuesta para verificar. Identifica exactamente los problemas de las versiones, resolvió mi problema y hay poco riesgo de romper algo.
R. Schreurs
10

Cambiarme a @Model de @model hizo el trabajo por mí.

@model representa el tipo de objeto Ver modelo. @Model representa el objeto Ver modelo.

eaglei22
fuente
1
¡Ojalá dejara de olvidar esto! ¡Gracias por recordarme!
Mike
1
La cantidad de veces que tengo que buscar este problema es frustrante ... ¡Pero me alegra que sea una solución simple!
Brendan Sluke
7

He encontrado una solucion. Si desea actualizar la versión de afeitar o mvc 4 a 5, cambie algunas líneas.

Código antiguo en Views / web.config

<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>

Reemplazadas con

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

sectionGroup debe ser el cambio, también.

ddagsan
fuente
6

En mi caso, el siguiente código resulta útil. Coloque el código siguiente en el archivo Web.config en la carpeta Vistas.

<configSections>

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

</configSections>

Una vez que se actualiza el código, asegúrese de limpiar y reconstruir la solución. ¡Espero que esto lo pueda ayudar!

Prach
fuente
5

Ninguna de las respuestas existentes funcionó para mí, pero encontré lo que funcionó para mí al comparar los .csprojarchivos de diferentes proyectos. La siguiente edición manual del .csprojarchivo XML resolvió el problema de Razor-intellisense para mí, tal vez esto pueda ayudar a alguien más que haya intentado todas las otras respuestas en vano. La clave es eliminar cualquier instancia de <Private>False</Private>en el <Reference>'s:

<ItemGroup>
  <Reference Include="Foo">
    <HintPath>path\to\Foo</HintPath>
    <!-- <Private>False</Private> -->
  </Reference>
  <Reference Include="Bar">
    <HintPath>path\to\Bar</HintPath>
    <!-- <Private>True</Private> -->
  </Reference>
</ItemGroup>

No sé cómo llegaron allí o exactamente qué hacen, tal vez alguien más inteligente que yo pueda agregar esa información. Estaba feliz de finalmente resolver este problema.

asontu
fuente
Gracias por la sugerencia, esto también funcionó para mí, por cualquier razón
Scherling
A mí también me funcionó.
Alex
Esa fue la única opción que funcionó en mi caso. Cambié un proyecto vs2010 a 2019 y trabajé como un encanto. Después de guardar el csproj, intenté descomentar las etiquetas como el archivo original, y aún funciona ...
jefissu
3

Por alguna razón, mi web.config tenía 0.0.0.0 en el atributo oldVersion:

<runtime>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
</runtime>

cambiar a 1.0.0.0 fue la solución:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
  </dependentAssembly>
chemark
fuente
3

Estaba usando un proyecto MVC4 con Visual Studio 2019, y resultó que VS 2019 no es compatible con MVC 4 de fábrica. Tienes que instalar esto.

Pasos:

  • Abra el instalador de Visual Studio (busque el instalador de Visual Studio en Windows)
  • Haga clic en componentes individuales
  • Escribe "mvc" en el cuadro de búsqueda
  • Marque la casilla mvc4
  • Haga clic en "Modificar" en la parte inferior derecha

NOTA: Requerido para que el estudio visual esté cerrado

ingrese la descripción de la imagen aquí

Stephan Ryer
fuente
2

En mi caso, el problema era que después de actualizar el proyecto de MVC 4 a MVC 5, de alguna manera me perdí un cambio de versión en Views / web.config:

    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">            

Todavía tenía la antigua versión 2.0.0.0. Después de cambiar la versión a 3.0.0.0, todo comenzó a funcionar correctamente.

Además, debido a este problema, Visual Studio 2015 Community Edition comenzaría a atacar la CPU (30-40% de uso en inactivo) cada vez que abriera un archivo .cshtml.

Mihai Caracostea
fuente
2

Tuve el mismo problema al implementar en un Servicio de aplicaciones de Azure

En mi caso fue porque ~ / Views / Web.config no estaba incluido en el proyecto.

Funcionó en IIS Express pero cuando lo implementé en azul, obtuve el mismo error. Al no estar incluido en el archivo .csproj, no se implementó.

La solución fue asegurar que ~ / Views / Web.config esté incluido en el proyecto.

Si va al explorador de soluciones y hace clic en el icono "Mostrar todos los archivos", luego abra Vistas, puede ver un archivo Web.config no incluido debajo.

Agrégalo, vuelve a publicar y Bob es tu tío.

gburton
fuente
1

Para mí, el problema era una versión conflictiva de .NET en una de las bibliotecas que importé recientemente. La biblioteca que importé se compiló para 4.5.2 y el sitio ASP.NET MVC lo importé a 4.5. Después de recompilar dicha lib para 4.5, el sitio web se compilaría.

Además, no hubo errores de compilación, pero el problema se informaba como una "advertencia". Así que asegúrese de leer todas las advertencias si hay alguna.

Big Gunz
fuente
1

Para resolver esto, me aseguré de actualizar a la última versión de MVC usando NuGet y Package Manager Console.

Install-Package Microsoft.AspNet.Mvc -Version 5.2.4

Luego actualizado a la última versión de Razor

Install-Package Microsoft.AspNet.Razor -Version 3.2.4

Luego cambié todos los archivos web.config para reflejar el cambio. Como verás a continuación:

En el archivo web.config principal, asegúrese de que las páginas web: la versión sea correcta. Aquí es donde se puede encontrar (ignore las otras claves):

<configuration>
 <appSettings>
   <add key="webpages:Version" value="3.0.0.0"/>
   <add key="ClientValidationEnabled" value="true"/>
   <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
 </appSettings>
</configuration>

Luego busque las otras versiones enumeradas en los ensamblajes, verifique la versión del ensamblaje con la versión de la biblioteca que figura en las referencias de su proyecto. Es posible que no necesite todo esto.

<system.web>
    <compilation debug="true" targetFramework="4.6">
        <assemblies>
            <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Helpers, Version=3.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=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </assemblies>
    </compilation>
</system.web>

Runtime assemblyBinding también debería mostrar la "nueva versión", ver dónde se lee NewVersion 5.2.4.0? Pero también verifique todas las otras versiones.

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

ENTONCES en la sección Vistas Web.Config, asegúrese de que Razor sea la versión correcta:

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

Y Lastlt está la sección de Páginas de la Web de Vistas.

    <pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
Keith Aymar
fuente
1

Si toma este problema sin ningún cambio en su proyecto como yo, necesita cambiar su web.config que se encuentra en Ver carpeta. simplemente escriba una nueva línea con Entrar o Eliminar una línea vacía. luego guarde su web.config y reconstruya. mi problema resuelto con esta solución

hossein andarkhora
fuente
0

Intenté agregar una vista que estaba fuera de mi carpeta "Vistas" (solo para organizar mi código de manera diferente, supongo), cuando tuve este problema. Crear la vista dentro de Vistas (como por convención) lo resolvió.

Svein Terje Gaup
fuente
0

En mi caso, me faltaba @ al comienzo del foreach

    @foreach (var item in Model)
    {
        <tr class="clickable-row">
            <td class="clickable-field">
                @Html.DisplayFor(modelItem => item.Label)
            </td>
            <td class="clickable-field hidden-xs">
                @Html.DisplayFor(modelItem => item.Value)
            </td>
        </tr>
    }
Sebastian Castaldi
fuente
Esto es importante; No sé por qué te rechazaron.
FlyingV
1
Porque no tiene nada que ver con la pregunta original.
Ryan
0

En mi caso, eliminé el archivo web.config de la carpeta Vistas por accidente. Lo agregué de nuevo, y estuvo bien.

Musulmán Hady
fuente
-3

Resolví el problema usando en @Modellugar de solo modelal imprimir las variables.

Mella
fuente
-8

Es probable que use en el código una variable llamada model.

agorshkov23
fuente