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?


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

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.


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


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.


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


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

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.


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.


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.


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!


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.


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>

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í


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.


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.


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.


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>

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


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


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

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.


-3

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


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.