O nome 'ViewBag' não existe no contexto atual - Visual Studio 2015

97

Estou começando a desenvolver em ASP.NET novamente e encontrei um pequeno erro no Visual Studio. Meus arquivos .cshtml mostram erros ao usar algumas funções de navalha. Por exemplo, "O nome 'ViewBag' não existe no contexto atual". Aqui está uma foto:

captura de tela do problema no visual studio 2015

Estou usando um projeto de demonstração. Você pode encontrar o projeto aqui: https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

Eu examinei vários outros tópicos e muitos sugerem atualizar o (s) arquivo (s) web.config. Esses 2 arquivos de configuração já estão presentes e, como é uma demonstração muito popular, presumo que tenha toda a configuração necessária. É claro que examinei esses arquivos de configuração e eles realmente incluem as soluções sugeridas.

Outros detalhes:

  • Já usei limpar e reconstruir na solução, mas isso não mudou nada.
  • Quando eu crio um projeto MVC completamente novo, ele funciona
  • Meu amigo tem o mesmo problema e nós dois usamos o VS 2015 e o Windows 10
  • Ainda consigo executar o aplicativo e ele funciona.

Desde já, obrigado.

Michjuh
fonte
Quando ainda é executado, é apenas um erro no compilador de segundo plano. Tente excluir o arquivo <Projectname> .suo.
Henk Holterman
qual projeto você está executando? básico? crud, roteamento?
Prashant Ghimire
1
@Henk infelizmente não funcionou.
Michjuh
@Prashant Eu tentei o projeto básico e o projeto de roteamento. O problema ocorre em ambos.
Michjuh
Você resolveu isso? Tive o mesmo problema @Michjuh
Burk

Respostas:

122

Tive esse problema apesar de ter todas as configurações corretas.

Descobriu-se que havia alguns arquivos ruins no Cache de Componente, impedindo as visualizações do Razor de reconhecer ViewBag, Model e HtmlHelpers . Excluir esses arquivos resolveu o problema (boas versões desses arquivos foram criadas na próxima vez que abri o Visual Studio).

Os arquivos estão localizados aqui:

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache

Exclua todos os quatro arquivos:

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

Posteriormente, vi o mesmo problema em várias outras máquinas de desenvolvedor e essa correção resolve rapidamente.

Fenton
fonte
9
Incrível, isso resolveu o problema para mim. Também descobri que excluir seus arquivos temporários do ASP.NET também ajuda. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files
Kevin
Essa foi a solução para mim também. Obrigado por publicar!
Caverman
Isso corrigiu meu problema causado pela atualização do .net 4 para 4.5.2 e atualização do mvc 3 para 5
Joe Phillips
Meu problema era que as propriedades do meu modelo não estavam sendo reconhecidas. Essa correção resolveu meu problema imediatamente.
jkerak de
5
minha pasta é 15.0_7e8de76c \ ComponentModelCache for VS 2017.
Kevin .NET
40

Atualize os números da versão nas configurações do web.configarquivo na pasta Views.

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

Se você atualizou a versão MVC através do nuget, deve ser:

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

Outras versões de dependência também podem precisar ser atualizadas. Problemas de compilação e espaço de nomes em Views para auxiliares e objetos MVC estão geralmente relacionados a web.configarquivos bagunçados dentro das pastas View.

Benjamin Anderson
fonte
8
Isso funcionou para mim, embora eu tivesse que inserir um número de versão 5.2.0.0 em vez de 5.2.2.0. Você pode ver a versão que possui acessando Referências> System.Web.MVC e selecionando Propriedades. Obrigado pela ajuda
user2233949
@ user2233949, @Benjamin Estou usando a versão MVC 4.0.0.0, pude ver nas propriedades. Qual deve ser a solução no meu caso?
Zeeshan
Verifique todos os seus arquivos web.config e certifique-se de que todos eles estejam usando a versão de host correta. Às vezes, quando você substitui as configurações em pastas de visão geral, o problema pode escapar sem ser corrigido.
Benjamin Anderson
1
Tentei todas as outras sugestões, mas esta funcionou para mim usando 5.2.3.0. Obrigado Benjamin
Mitch
1
Esta foi a resposta correta para mim. Também depois de mudar o web.config, não se esqueça de fechar todos os seus *.cshtmle *.vbhtmlarquivos e limpo e recriar a solução. VS 2019 16.1.2
Štěpán Havránek
22

Encontre "páginas da web: Versão" nas configurações do aplicativo e atualize-o para a versão 3.0.0.0. Meu web.config tinha

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

e eu atualizei para

<add key=”webpages:Version value=”3.0.0.0 />
Damian Green
fonte
1
Removi as duas linhas (webpages.Version, webpages.Enabled) e parece que está funcionando bem no MVC 5.2
Grappachu
Isso deve ser atualizado em ambas as versões do Web.config, raiz do projeto e também Web.configs de qualquer área.
Sonu K
Obrigado. No meu caso, as tags problemáticas estão em <configuration> - <configSections> - <sectionGroup name = "system.web.webPages.razor"> Eu preciso alterar <sectionGroup name = "system.web.webPages.razor">, <section name = "host"> e <section name = "pages"> para usar a Versão = 3.0.0.0
Hong
Remover o cache de qualquer lugar (inclusive Temporary ASP.NET Files) não ajudou, mas essa resposta ajudou .
dia
O que essa configuração significa ? A que isso corresponde? Como você determina de qual versão depende em seu aplicativo?
jpmc26
17

Eu acidentalmente removi web.configda Viewspasta, pensando que era desnecessário. Quando o coloquei de volta, ele começou a funcionar.

InGeek
fonte
13

Depois de tentar tudo sob o sol, verifica-se algo tinha modificado o meu System.Web.WebPages.Razor <sectionGroup>na /Views/Web.Configdo CamelCase adequada System.Web.WebPages.Razorpara um tudo-em minúsculas system.web.webpages.razorque finalmente foi minha morte.

Esperando que isso possa ajudar alguma outra pobre alma com este problema ...

Para referência, esta é a entrada correta (para o meu cenário)

<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
fonte
3
O meu era todo minúsculo, mas não resolveu o meu problema.
Paul Totzke
Caramba. Esta também foi a minha morte. Não acredito que você descobriu isso, @jbwedtech.
Luke Puplett
Eu também tinha em caixa baixa e mudar a caixa não resolveu o problema.
Andy Brown de
5

Às vezes, não é suficiente alterar os números da versão nas configurações do web.config. Esse problema ocorre porque o Visual Studio 2015 não tem ferramentas mvc4.

A solução é atualizar seu projeto para MVC 5. Isso resolve totalmente o problema. Você pode obter ajuda nesta página. Isso 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

A propósito, a equipe do Visual Studio declarou que irá adicionar suporte a mvc4 ao Visual Studio 2015 com a primeira atualização.

Burk
fonte
5

Enfrentei esse problema mais vezes e finalmente descobri que isso acontecia porque a pasta de visualizações deveria conter sua própria configuração web

hosam hemaily
fonte
2
Mas o que deveria estar nesse web.config? Não deveria ser gerado automaticamente? (atualização) Encontrado o que deveria ter e como é gerado stackoverflow.com/questions/29305914/…
drzaus
Sim, você está certo, no meu projeto, Web.Config não existia antes (sim, ele deveria gerar automaticamente, mas pegou um projeto do desenvolvedor anterior, não tenho certeza porque ele o excluiu). Depois de adicionar o arquivo Web.Config às pastas do Views, funcionou.
user3559462
2

atrasado para o jogo, mas nenhuma dessas soluções funcionou para mim.

Eu atualizei para o VS 2017 e o site funcionou, mas o compilador do Visual Studio quebrou a maioria dos arquivos .cshtml

TLDR;

mysolution.sln tinha a versão errada

sln diff

então você deseja criar uma nova solução com o VS mais recente, compará-la com a sua e copiar as informações da versão.

etapas completas de atualização:

  1. certifique-se de que o arquivo .sln tenha a versão correta para VS
  2. clique com o botão direito do mouse em MySolution em VS> Nuget Manager> Updates> execute todas as atualizações
  3. clique com o botão direito em MySolution em VS> Application> update Target Framework (4.5.2 no meu caso)
  4. corrigir quaisquer problemas de versão em arquivos .config (ou seja, RAZOR para 3.0.0.0)
  5. corrigir quaisquer problemas de código no compilador (para mim ForEach era ambíguo)
Sonic Soul
fonte
Meu projeto foi iniciado no VS2013, quando eu bati no VS2017 comecei a ver esses erros, mas tudo compilou bem, então tentei descobrir o que estava acontecendo, mas não muito difícil. Estava se tornando um problema porque abrir uma visualização criava um grande número de erros. Agora estou no VS2019 e me deparei com sua correção; você é demais! Meu .sln tinha 14.0.25123.0 e era para ser 16.3.9. Eu também consertei quaisquer problemas de versão com o framework. Eu não tive que atualizar os pacotes nuget (felizmente) porque não tenho tempo para testar totalmente todas as atualizações.
DaBlue
1

Perdi um dia de trabalho muito bom nisso. Tentei de tudo neste (e em outros) posts, sem sucesso. Eventualmente, descobri que precisava abrir o projeto de uma maneira diferente. Acabei de atualizar um site existente para Visual Studio 2015, MVC5, .NET framework 4.5.2 e estou usando o Windows 10, mas suspeito que a resposta seria a mesma para outras versões de cada aplicativo de software.

Portanto, esta é a opção de menu que escolhi para abrir um site:

insira a descrição da imagem aqui

Em vez disso, abri o arquivo csproj definindo o projeto usando esta opção de menu:

insira a descrição da imagem aqui

Então, tive a opção "solução limpa" à qual muitas outras pessoas se referem:

insira a descrição da imagem aqui

No entanto, eu nem precisava disso - tudo funcionou! Bem, eu passei para o próximo conjunto de problemas, de qualquer maneira ...

Andy Brown
fonte
1

Eu tinha adicionado o controlador por

  • Etapa 1: Adicionar> Classe
  • Etapa 2: UserController
  • .
  • .
  • .

código correspondente criado:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

Meus erros foram alterados alterando a Etapa 1 como:

  • Etapa 1: Adicionar> Controlador
  • Etapa 2: controlador do usuário
  • .
  • .
  • .

código correspondente criado:

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

O problema era: eu não herdei minha classe do controlador

Outras mensagens em meu erro incluídas - todas provenientes deste problema:

erro CS0117: 'ModelState' não contém uma definição para 'IsValid'

erro CS0103: O nome 'RedirectToAction' não existe no contexto atual

erro CS0103: O nome 'Exibir' não existe no contexto atual

erro CS0103: O nome 'ViewBag' não existe no contexto atual

erro CS0103: O nome 'Json' não existe no contexto atual

Espero que essa mudança ajude aqueles que não prestaram atenção em seus passos iniciais.

Ganesh Kamath - 'Code Frenzy'
fonte
1

Depois de tentar pelo menos 90% de todas as soluções / truques desse assunto (e outros), finalmente resolvi !! Alerta de spoiler, não há nenhum vestígio de lógica é a seguinte chamada "solução": Rodar a solução com todas as abas fechadas finalmente funcionou, quando nada mais me pouparia do "ViewBag & Co não existe no contexto atual" ... Você foi avisado, sem lógica!

Espero que ajude alguém um dia ^^

Jueverhard
fonte
1

No meu caso, esse problema estava acontecendo apenas no meu PC para apenas um projeto. Meu projeto funcionou bem no VS2012, mas quando aberto no VS2017 estava com esse problema.

O principal problema para mim aqui era o cache. Meu projeto estava apontando para as versões em cache mais antigas da dll para Razor e MVC e não estava encontrando recursos que foram adicionados em versões mais recentes, como o ViewBag. O ViewBag foi adicionado no Razor versão 3, mas como eu tinha o Razor versão 2 em cache, ele não conseguiu encontrar o ViewBag (mas conseguiu encontrar outras coisas que estavam presentes na versão 2). No entanto, simplesmente limpar o cache, como na resposta aceita, não resolveu meu problema. Tivemos que mudar os arquivos de configuração para dizer "use a versão 3 em vez de 2" para o Razor e "use a versão 5 em vez de 4" para MVC, fechando o VS, removendo o cache e abrindo o projeto e reconstruindo. Então as coisas foram consertadas. Abaixo estão instruções mais detalhadas.

Aqui está a sequência de mudanças que me ajudaram a resolver meu problema:

  1. No Web.config da pasta "Views", altere todos os locais onde
    • A versão MVC está definida para 4.0.0.0 a 5.0.0.0
    • A versão do Razor está definida para 2.0.0.0 a 3.0.0.0

Aqui estão essas linhas no meu 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) suas versões podem ser diferentes, estou apenas dizendo o que precisava ser feito no meu caso 2) Eu omiti algumas coisas com "..." por brevidade 3) mesmo se você tiver uma versão MVC algo como 5.3.2.0 você ainda deve inserir 5.0.0.0, o mesmo que a versão do Razor - insira todos os zeros em 3.0.0.0)

  1. No arquivo de configuração principal (aquele no nível superior), mude webPages:versionde 2.0.0.0 para 3.0.0.0.

  2. Essa mudança provavelmente não afetou a solução, mas ainda vou mencioná-la. Certifique-se de que a <namespaces>seção da pasta "Visualizações" tenha exatamente o mesmo conteúdo do arquivo .conifg principal na raiz do projeto, 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, feche o VS. Exclua todos os arquivos de cache em %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(ou qualquer que seja o seu caminho correto), assim como é sugerido na (atualmente) resposta aceita por Fenton. Exclua também o .scanarquivo, mesmo que não esteja mencionado na resposta. Quando terminar, abra o VS, limpe seu projeto e reconstrua-o. As coisas devem estar funcionando agora. Funcionou para mim
seja o que for
fonte
0

Desligar e ligar funcionou para mim. Você pode tentar reiniciar o Visual Studio.

kravits88
fonte
Parece uma piada, mas foi isso que consertou as coisas para mim. encolher os ombros
Douglas Timms
0

Consegui resolver o problema adicionando o seguinte ao topo da minha página .cshtml

@{ViewBag.Title = "Title";}

Depois de recompilar, consegui deletar essa linha e o erro sumiu.

Colin
fonte
0

Eu enfrentei um problema semelhante com um de meus pontos de vista. No meu caso, apenas limpei a solução e tentei reconstruí-la e funcionar.

SATYA PRAKASH NANDY
fonte
0

Eu enfrentei o mesmo problema. Tentei a solução Limpar, Construir e Reconstruir, mas não funcionou para mim.

Então, finalmente fiz o seguinte:

  1. Pressione a tecla Windows + R
  2. Digite % temp%
  3. Pressione Enter
  4. Exclua todos os arquivos (se alguns arquivos forem deixados sem exclusão, sem problemas)

Espero que funcione para vocês também.

Sadiq
fonte
0

Depois de atualizar um dos aplicativos do meu cliente de ASP MVC 4 para ASP MVC 5, tivemos erros de designers relacionados a Html Helpers e ViewBag em páginas cshtml.

Para corrigir esses problemas, certifique-se de fazer o seguinte: Instalar a biblioteca de ajudantes da Web do Asp.NET do Nuget Abra o Web.config do projeto e atualize os vínculos se eles não tiverem sido atualizados durante a instalação dos pacotes Nuget, por exemplo

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

Encontre “páginas da web: Versão” nas configurações do aplicativo e atualize-o para a versão 3.0.0.0. Meu web.config tinha

e eu atualizei para

Reinicie o Visual Studio e reconstrua. Você pode ter que deletar a pasta bin do seu projeto

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

Raniel Garcia
fonte
-1

Depois de tentar de tudo e me sentir um pouco frustrado, atualizei o framework .NET em meu aplicativo MVC5 de 4.5 para 4.5.2. De alguma forma, isso resolveu meu problema. Espero que ajude.

user3520884
fonte
-4

Resolvi substituir no web.config

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

com

 <add key="webpages:Enabled" value="true" />
Fabio Manneschi
fonte
Só para acrescentar porque foi rejeitado - permite que a visualização real seja visível em um navegador, acredito
mtbennett