El nombre 'ViewBag' no existe en el contexto actual - Visual Studio 2015

97

Estoy comenzando a desarrollarme en ASP.NET nuevamente y encontré un pequeño error dentro de Visual Studio. Mis archivos .cshtml muestran errores al usar algunas funciones de la maquinilla de afeitar. Por ejemplo, "El nombre 'ViewBag' no existe en el contexto actual". Aquí hay una imagen:

captura de pantalla del problema en Visual Studio 2015

Estoy usando un proyecto de demostración. Puede encontrar el proyecto aquí: https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

He revisado varios otros hilos y la mayoría sugiere actualizar los archivos web.config. Estos 2 archivos de configuración ya están presentes y, dado que es una demostración bastante popular, supongo que tiene toda la configuración requerida. Por supuesto, he revisado estos archivos de configuración y, de hecho, incluyen las soluciones sugeridas.

Otros detalles:

  • Ya utilicé clean & rebuild en la solución, pero eso no cambió nada.
  • Cuando creo un proyecto MVC completamente nuevo, funciona
  • Mi amigo tiene el mismo problema y ambos usamos VS 2015 y Windows 10
  • Todavía puedo ejecutar la aplicación y funciona.

Gracias por adelantado.

Michjuh
fuente
Cuando todavía se ejecuta, es solo un error en el compilador en segundo plano. Intente eliminar el archivo <Projectname> .suo.
Henk Holterman
¿Qué proyecto estás ejecutando? básico ? basura, enrutamiento?
Prashant Ghimire
1
@Henk lamentablemente eso no funcionó.
Michjuh
@Prashant He probado tanto el proyecto básico como el proyecto de enrutamiento. El problema ocurre en ambos.
Michjuh
¿Lo resolviste? Tuve el mismo problema @Michjuh
Burk

Respuestas:

122

Tuve este problema a pesar de tener toda la configuración correcta.

Resultó que había algunos archivos incorrectos en la caché de componentes, lo que impedía que las vistas de Razor reconocieran ViewBag, Model y HtmlHelpers . Eliminar estos archivos resolvió el problema (se crearon buenas versiones de estos archivos la próxima vez que abrí Visual Studio).

Los archivos se encuentran aquí:

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache

Elimina los cuatro archivos:

  • Microsoft.VisualStudio.Default.cache
  • Microsoft.VisualStudio.Default.catalogs
  • Microsoft.VisualStudio.Default.err
  • Microsoft.VisualStudio.Default.external

Posteriormente, he visto el mismo problema en varias otras máquinas de desarrollo y esta solución lo resuelve rápidamente.

Fenton
fuente
9
Genial, esto me solucionó el problema. También descubrí que eliminar sus archivos ASP.NET temporales también ayuda. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files
Kevin
Esta fue la solución para mí también. ¡Gracias por publicar!
Caverman
Esto solucionó mi problema causado por la actualización de .net 4 a 4.5.2 y la actualización de mvc 3 a 5
Joe Phillips
Mi problema era que no se reconocían las propiedades de mi modelo. Esta solución resolvió mi problema de inmediato.
jkerak
5
mi carpeta es 15.0_7e8de76c \ ComponentModelCache para VS 2017.
Kevin .NET
40

Actualice los números de versión en la configuración del web.configarchivo en la carpeta Vistas.

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

Si ha actualizado la versión MVC a través de nuget, debería ser:

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

Es posible que también sea necesario actualizar otras versiones de dependencia. Los problemas de compilación y espacio de nombres en Vistas para ayudantes y objetos de MVC suelen estar relacionados con web.configarchivos desordenados dentro de las carpetas Ver.

Benjamin Anderson
fuente
8
Esto funcionó para mí, aunque tuve que ingresar un número de versión de 5.2.0.0 en lugar de 5.2.2.0. Puede ver qué versión tiene yendo a Referencias> System.Web.MVC y seleccionando Propiedades. Gracias por la ayuda
user2233949
@ user2233949, @Benjamin Estoy usando la versión MVC 4.0.0.0, pude verlo en las propiedades. ¿Cuál debería ser la solución en mi caso?
Zeeshan
Verifique todos sus archivos web.config y asegúrese de que todos estén usando la versión de host correcta. A veces, cuando ha anulado la configuración en las carpetas de visualización, el problema puede pasar sin ser corregido.
Benjamin Anderson
1
Probé todas las otras sugerencias, pero esta me funcionó usando 5.2.3.0. Gracias Benjamin
Mitch
1
Esta fue la respuesta correcta para mí. También después de cambiar el web.config, no se olvide de cerrar todas las *.cshtmly los *.vbhtmlarchivos y limpia y reconstruir la solución. VS 2019 16.1.2
Štěpán Havránek
22

Busque "páginas web: Versión" en la configuración de la aplicación y actualícela a la versión 3.0.0.0. Mi web.config tenía

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

y lo actualicé a

<add key=”webpages:Version value=”3.0.0.0 />
Damian Green
fuente
1
Eliminé ambas líneas (páginas
web.Versión
Esto debería actualizarse en ambas versiones de Web.config, raíz del proyecto y también en Web.configs de cualquier área.
Sonu K
Gracias. En mi caso, las etiquetas problemáticas están en <configuration> - <configSections> - <sectionGroup name = "system.web.webPages.razor"> Necesito cambiar <sectionGroup name = "system.web.webPages.razor">, <section name = "host"> y <section name = "pages"> para usar Version = 3.0.0.0
Hong
Eliminar el caché en cualquier lugar (incluido Temporary ASP.NET Files) no ayudó, pero esta respuesta lo hizo .
sea
Lo que ni siquiera este ajuste significa ? ¿A qué corresponde? ¿Cómo determina de qué versión depende en su aplicación?
jpmc26
17

Lo quité accidentalmente web.configde la Viewscarpeta, pensando que era innecesario. Cuando lo devolví, comenzó a funcionar.

InGeek
fuente
13

Después de probar todo bajo el sol, resulta que algo había modificado mi System.Web.WebPages.Razor <sectionGroup>en /Views/Web.Configel CamelCase adecuada System.Web.WebPages.Razora un todo-en minúsculas system.web.webpages.razorque en última instancia era mi muerte.

Esperando que esto pueda ayudar a alguna otra pobre alma con este problema ...

Como referencia, esta es la entrada correcta (para mi escenario)

<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"> 
jbwebtech
fuente
3
El mío era todo en minúsculas pero no resolvió mi problema.
Paul Totzke
Carpa santa. Esta fue también mi desaparición. No puedo creer que hayas descubierto esto, @jbwedtech.
Luke Puplett
Yo también los tenía en minúsculas y cambiar el caso no resolvió el problema.
Andy Brown
5

A veces no es suficiente cambiar los números de versión en la configuración de web.config. Este problema se produce porque Visual Studio 2015 no tiene herramientas mvc4.

La solución es actualizar su proyecto a MVC 5. Resuelve totalmente el problema. Puede obtener ayuda en esta página. Lo explica claramente.

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

Por cierto, el equipo de Visual Studio declaró que agregarán compatibilidad con mvc4 a Visual Studio 2015 con la primera actualización.

Burk
fuente
5

Me enfrenté a este problema más veces y finalmente descubrí que sucedió porque la carpeta de vistas debería contener su propia configuración web

hosam hemaily
fuente
2
Pero, ¿qué se supone que hay en ese web.config? ¿No debería ser autogenerado? (actualización) Encontré lo que debería tener y cómo se genera stackoverflow.com/questions/29305914/…
drzaus
Sí, tiene razón, en mi proyecto, Web.Config no existía antes (sí, debería generarse automáticamente, pero tomó un proyecto del desarrollador anterior, no estoy seguro de por qué lo eliminó). Después de agregar el archivo Web.Config para las carpetas de Vistas, funcionó.
user3559462
2

tarde para el juego, pero ninguna de estas soluciones funcionó para mí.

Actualicé a VS 2017 y el sitio funcionó, pero el compilador de Visual Studio rompió la mayoría de los archivos .cshtml

TLDR;

mysolution.sln tenía la versión incorrecta

sln diff

por lo que desea crear una nueva solución con VS más reciente y compararla con la suya y copiar la información de la versión.

pasos completos de actualización:

  1. asegúrese de que el archivo .sln tenga la versión correcta para VS
  2. haga clic derecho en MySolution en VS> Nuget Manager> Actualizaciones> ejecutar todas las actualizaciones
  3. haga clic derecho en MySolution en VS> Aplicación> actualizar Target Framework (4.5.2 en mi caso)
  4. solucione cualquier problema de versión en archivos .config (es decir, RAZOR a 3.0.0.0)
  5. arreglar cualquier problema de código en el compilador (para mí, ForEach era ambiguo)
Sonic Soul
fuente
Mi proyecto se inició en VS2013, cuando llegué a VS2017 comencé a ver estos errores, pero todo se compiló bien, así que traté de averiguar qué estaba pasando, pero no demasiado. Se estaba convirtiendo en un problema porque abrir una vista creaba una gran cantidad de errores. Ahora estoy en VS2019 y tropecé con tu solución; ¡tú Molas! Mi .sln tenía 14.0.25123.0 y debía ser 16.3.9. También solucioné cualquier problema de versión con el marco. No tuve que actualizar los paquetes nuget (afortunadamente) ya que no tengo tiempo para probar todas las actualizaciones.
DaBlue
1

He desperdiciado más de un día de trabajo en esto. Intenté todo en esta (y otras) publicaciones, sin éxito. Finalmente descubrí que necesitaba abrir el proyecto de una manera diferente. Acabo de actualizar un sitio web existente a Visual Studio 2015, MVC5, .NET framework 4.5.2 y estoy usando Windows 10, pero sospecho que la respuesta habría sido la misma para otras versiones de cada aplicación de software.

Así que esta es la opción de menú que estaba eligiendo para abrir un sitio web:

ingrese la descripción de la imagen aquí

En lugar de esto, abrí el archivo csproj que define el proyecto usando esta opción de menú:

ingrese la descripción de la imagen aquí

Luego tuve la opción de "solución limpia" a la que muchas otras personas se refieren:

ingrese la descripción de la imagen aquí

Sin embargo, ni siquiera necesitaba esto, ¡todo funcionó! Bueno, de todos modos pasé al siguiente conjunto de problemas ...

Andy Brown
fuente
1

Había agregado el controlador por

  • Paso 1: Agregar> Clase
  • Paso 2: UserController
  • .
  • .
  • .

código correspondiente creado:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

Mis errores se cambiaron cambiando el Paso 1 como:

  • Paso 1: Agregar> Controlador
  • Paso 2: controlador de usuario
  • .
  • .
  • .

código correspondiente creado:

namespace SampleApp.Controller {
    public class UserController : Controller {
    }
}

El problema era: no había heredado mi clase de Controller

Otros mensajes en mi error incluidos, todos los cuales eran de este problema:

error CS0117: 'ModelState' no contiene una definición para 'IsValid'

error CS0103: el nombre 'RedirectToAction' no existe en el contexto actual

error CS0103: el nombre 'Ver' no existe en el contexto actual

error CS0103: el nombre 'ViewBag' no existe en el contexto actual

error CS0103: el nombre 'Json' no existe en el contexto actual

Espero que este cambio ayude a quienes no han prestado atención en sus pasos iniciales.

Ganesh Kamath - 'Code Frenzy'
fuente
1

Después de haber probado al menos el 90% de cada solución / truco de este tema (y otros), ¡finalmente lo he resuelto! Alerta de spoiler, no hay rastro de lógica es la siguiente llamada "solución": Ejecutar la solución con todas las pestañas cerradas finalmente funcionó, cuando nada más me hubiera ahorrado el "ViewBag & Co no existe en el contexto actual" ... ¡Has sido advertido, sin maldita lógica!

Espero que algún día ayude a alguien ^^

Jueverhard
fuente
1

En mi caso, tuve este problema solo en mi PC solo para un proyecto. Mi proyecto funcionó bien en VS2012, pero cuando se abrió en VS2017 tenía este problema.

El principal problema para mí aquí fue el caché. Mi proyecto apuntaba a las versiones anteriores en caché de dll para Razor y MVC y no encontraba características que se agregaron en versiones más nuevas, como ViewBag. ViewBag se agregó en la versión 3 de Razor, pero debido a que tenía la versión 2 de Razor en caché, no pudo encontrar ViewBag (pero pudo encontrar otras cosas que estaban presentes en la versión 2). Sin embargo, simplemente borrar el caché como en la respuesta aceptada no solucionó mi problema. Tuvimos que cambiar los archivos de configuración para decir "usar la versión 3 en lugar de 2" para Razor y "usar la versión 5 en lugar de 4" para MVC, luego cerrar VS, eliminar el caché y abrir el proyecto y reconstruir. Entonces las cosas se arreglaron. A continuación se muestran instrucciones más detalladas.

Aquí está la secuencia de cambios que me ayudaron a solucionar mi problema:

  1. En Web.config de la carpeta "Vistas", cambie todas las ubicaciones donde
    • La versión de MVC se establece en 4.0.0.0 a 5.0.0.0
    • La versión de Razor está configurada de 2.0.0.0 a 3.0.0.0

Aquí están esas líneas en mi caso:

<sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
    <section name="host" type="... Version=3.0.0.0 ..." .../>
    <section name="pages" type="... Version=3.0.0.0 ..." .../>
</sectionGroup>
...
<host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
...
<pages
    ...
    pageParserFilterType="... Version=5.0.0.0 ..."
    pageBaseType="... Version=5.0.0.0 ..."
    userControlBaseType="... Version=5.0.0.0 ...">
    <controls>
        <add assembly="... Version=5.0.0.0 ..." ... />
    </controls>
</pages>

(notas: 1) sus versiones pueden ser diferentes, solo estoy diciendo lo que se necesitaba hacer en mi caso 2) omití algunas cosas con "..." para abreviar 3) incluso si tiene una versión MVC similar a 5.3.2.0 aún debe ingresar 5.0.0.0, lo mismo con la versión de Razor: ingrese todos los ceros en 3.0.0.0)

  1. En el archivo de configuración principal (el que está en el nivel superior) cambie webPages:versionde 2.0.0.0 a 3.0.0.0.

  2. Este cambio probablemente no afectó la solución, pero aún lo mencionaré. Asegúrese de que la <namespaces>sección de la carpeta "Vistas" tenga exactamente el mismo contenido que el archivo .conifg principal en la raíz del proyecto, algo como:

<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.Optimization" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />
</namespaces>
  1. Finalmente, cierre VS. Elimine todos los archivos de caché en %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(o cualquiera que sea su ruta correcta) tal como se sugiere en la respuesta (actualmente) aceptada por Fenton. También elimine el .scanarchivo, incluso si no se menciona en esa respuesta. Una vez que haya terminado, abra VS, limpie su proyecto y vuelva a construirlo. Las cosas deberían estar funcionando ahora. Funcionó para mí.
lo que sea
fuente
0

Apagarlo y encenderlo nuevamente funcionó para mí. Puede intentar reiniciar Visual Studio.

kravits88
fuente
Suena como una respuesta de broma, pero esto es lo que solucionó las cosas para mí. encogimiento de hombros
Douglas Timms
0

Pude resolver el problema agregando lo siguiente en la parte superior de mi página .cshtml

@{ViewBag.Title = "Title";}

Después de recompilar pude eliminar esta línea y el error desapareció.

Colin
fuente
0

Enfrenté un problema similar con uno de mis puntos de vista. En mi caso, limpié la solución e intenté reconstruirla y funciona.

SATYA PRAKASH NANDY
fuente
0

Me enfrenté al mismo problema. Probé la solución Clean, Build and Rebuild, pero no funcionó para mí.

Así que por fin hice lo siguiente:

  1. Presione la tecla de Windows + R
  2. Tipo % temp%
  3. Presiona Enter
  4. Elimine todos los archivos (si quedan pocos archivos sin eliminar, no hay problemas)

Espero que les funcione a ustedes también.

Sadiq
fuente
0

Después de actualizar una de las aplicaciones de mi cliente de ASP MVC 4 a ASP MVC 5, tuvimos errores de diseñadores relacionados con Html Helpers y ViewBag en páginas cshtml.

Para solucionar esos problemas, asegúrese de hacer lo siguiente: Instale la biblioteca de Asp.NET Web Helpers desde Nuget Abra el Web.config del proyecto y actualice los enlaces si no se han actualizado al instalar los paquetes de Nuget, por ejemplo

<dependentAssembly>
  <assemblyIdentity name=”System.Web.Mvc publicKeyToken=”31bf3856ad364e35 />
  <bindingRedirect oldVersion=”0.0.0.0-5.2.2.0 newVersion=”5.2.2.0 />
</dependentAssembly>

Busque "páginas web: Versión" en la configuración de la aplicación y actualícela a la versión 3.0.0.0. Mi web.config tenía

y lo actualicé a

Reinicie Visual Studio y reconstruya. Es posible que deba eliminar la carpeta bin de su proyecto

Visite esto: https://lajak.wordpress.com/2014/11/16/asp-mvc-5-viewbag-does-not-exist-in-the-current-context/

raniel garcia
fuente
-1

Después de probar todo lo demás y sentirme un poco frustrado, actualicé .NET Framework en mi aplicación MVC5 de 4.5 a 4.5.2. De alguna manera solucionó mi problema. Espero eso ayude.

user3520884
fuente
-4

Resolví reemplazar en web.config

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

con

 <add key="webpages:Enabled" value="true" />
Fabio Manneschi
fuente
Solo para agregar a por qué se rechazó esto, creo que permite que la vista real sea visible desde un navegador
mtbennett