O nome 'ViewBag' não existe no contexto atual

89

Estou tentando usar o ViewBag em meu aplicativo, tenho todas as dlls recentes, a versão mais recente do MVC 3, mas ainda estou recebendo o erro:

"O nome 'ViewBag' não existe no contexto atual"

Eu até desinstalei e reinstalei o MVC 3 e ainda não houve nenhuma mudança.

Além disso, não acredito que as dll's estejam aparecendo no GAC.

Qual pode ser o meu problema? Ou como adicionar dll's ao GAC?

fugindo
fonte
1
Tenha em mente que para 5.2.2.0 o web.config deve apontar para 5.2.2.0, mas Views / web.config para 5.1.0.0 para montagem MVC
Bart Calixto

Respostas:

39

Você precisa adicionar a configuração do Razor específica do MVC ao seu web.config. Veja aqui: Razor HtmlHelper Extensions (ou outros namespaces para visualizações) não encontrado

Use a ferramenta de atualização MVC 3 para garantir automaticamente que você tenha os valores de configuração corretos.

Marcind
fonte
Obrigado! Esse link ajudou! Acho que tudo isso é resultado de fazer um site que estava no MVC 3 Beta, e quando você obtém a versão mais recente, as configurações da web não são alteradas. Obrigado!
dia
Eu atualizei minha postagem com isso, bem como uma correção relacionada: stevesmithblog.com/blog/…
ssmith
Você pode usar a ferramenta de atualização (veja a resposta atualizada) para garantir que sua configuração esteja correta.
marcind de
3
Apenas uma observação: se você tiver locais de visualização adicionais, ou seja, fora do ~/Viewslocal normal , copie o ~/Views/Web.configpara esse local também.
Dave Thieben
83

Eu estava tendo o mesmo problema. Descobri que estava faltando o ./Views/Web.configarquivo, porque criei o projeto a partir de um aplicativo ASP.NET vazio em vez de usar um modelo ASP.NET MVC.

Para ASP.NET MVC 5, um ./Views/Web.configarquivo vanilla contém o seguinte:

<?xml version="1.0"?>

<!-- https://stackoverflow.com/a/19899269/178082 -->
<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>

    <system.web.webPages.razor>
        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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>

        <!--
                Enabling request validation in view pages would cause validation to occur
                after the input has already been processed by the controller. By default
                MVC performs request validation before a controller processes the input.
                To change this behavior apply the ValidateInputAttribute to a
                controller or action.
        -->
        <pages
                validateRequest="false"
                pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
                pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
                userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <controls>
                <add assembly="System.Web.Mvc, Version=5.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>

Adicionar um ./Views/Web.configarquivo com esse conteúdo resolveu esse problema para mim.

crimbo
fonte
3
Solução finalmente. Não implantei o arquivo /Views/Web.config no servidor e esse arquivo ausente foi a causa do erro.
Stack Man de
2
voltou e usei esta solução uma 2ª vez! :)
user230910
2
Depois de perder um dia tentando descobrir, isso funcionou para mim. Obrigado. A única coisa que eu precisava adicionar à tag <namespaces> em "./Views/Web.config era; <add namespace="System.Web.Optimization"/>
dunwan
no meu caso, por algum motivo, os elementos não estavam no web.config raiz, mas foram adicionados a um web.config em 'Visualizações' quando criei um layout MVC5. Migrei os elementos para a raiz web.config e excluí o 'extra' (??) web.config
JDPeckham
2
Cara, Deus te abençoe por isso. Fiquei EXTREMAMENTE irritado com isso.
Dragan B.
19

Tente limpar e reconstruir. Funcionou no meu caso.

Ruwan Jayalath
fonte
Não posso acreditar que perdi meu tempo imaginando o que havia de errado com meu código ... obrigado, funcionou
Mr_Hmp
enfurecedor que isso funcione ... eu sempre esqueço de fazer isso e perco tanto tempo ... não deveria ser necessário
TCC
no meu caso, tive que deletar a pasta de pacotes da solução e fazer uma limpeza
Nerdroid
9

Tive o mesmo problema em uma solução que foi atualizada para MVC 5 no Visual Studio 2015.

No arquivo web.config da pasta Views (não no web.config raiz), atualizei o número da versão referido em <configSections>de 2.0.0.0para 3.0.0.0.

<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>
Jon Crowell
fonte
2
Muito obrigado! Essa coisa de versão é uma loucura. Toda vez que eu ligo para o MS, as atualizações são uma sobre a outra. Ling to SQL é substituído por Entity Framework, MVC foi de 1 para 6, e assim por diante.
JustJohn
Obrigado, consertou meu problema com o VS2017.
QuickNull
O aplicativo VS 2019 mvc 5 corrigido.
MrDywar
6

Depois de tentar coisas diferentes, descobri que era o cache do VS. Você pode resolver isso excluindo os arquivos de cache localizados em:

C: \ Users \ your.name.here \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ComponentModelCache

Fechei meu projeto, apaguei os arquivos daquele caminho e reabri meu projeto, limpei a solução e a construí novamente e o problema foi resolvido

Os arquivos serão recriados na próxima vez que você iniciar o Visual Studio

Wilson Vallecilla
fonte
Isso funcionou para mim na v15 (VS 2017) também. Eu provavelmente nunca teria pensado em fazer isso ... obrigado por uma grande economia de tempo, Wilson & Silver!
Paul Schroeder
Caminho universal%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
decreto de
3

Eu tive o mesmo problema e o crimbo me deu a pista certa, foi causado pelo arquivo ./Views/Web.config que estava presente, mas não contém os namespaces corretos, eu acho ...

Eu criei um projeto MVC5 em branco e importei seu ./Views/Web.config em meu projeto existente e as ondas vermelhas em cada uso de ViewBag sumiram!

JJP
fonte
Visual Studio 2013, criado projeto da web em branco com a caixa MVC marcada. Ele cria toda a estrutura de arquivos com referências mínimas de namespace MVC. Eu adicionei um controlador e visualização simples. Recebi erros de compilação "O tipo ou nome do namespace 'Ajax' não existe no namespace 'System.Web.Mvc' (falta uma referência de assembly)". O Editor de Arquivos também mostra o aviso "O nome 'ViewBag' não existe no contexto atual". Vá para Referências do projeto, encontre System.Web.Mvc, defina a cópia local como verdadeira. limpar a construção e reconstruir, resolveu meu problema.
Kagan Agun de
2

Eu tinha um ./Views/Web.Configarquivo, mas esse erro aconteceu após a publicação do site. Acontece que a propriedade de ação de construção no arquivo foi definida como em Nonevez de Content. Alterar isso para Contentpermitir que a publicação funcione corretamente.

Kcoder
fonte
1

Tive esse problema depois de alterar o namespace padrão do aplicativo na caixa de diálogo Propriedades.

O ./Views/Web.Config continha uma referência ao antigo namespace

csharpsql
fonte
Sim, e dá uma mensagem de erro no lugar completamente errado .. vale a pena verificar se existem todos os namespaces que são mencionados em TODOS os arquivos web.config - Eu tinha um namespace antigo no arquivo web / config da Área causando muitos problemas
user230910
1

No meu caso, alterar a página da web: Versão para o valor adequado resolveu meu problema, para mim o valor correto era (2.0.0.0 em vez de 3.0.0.0):

<appSettings>
        <add key="webpages:Version" value="2.0.0.0"/>
        <add key="webpages:Enabled" value="false"/>
Robin Leblond
fonte
1

Depois de tentar todas as abordagens, nenhuma delas funcionou para mim, pois tudo que eu tinha eram configurações corretas. finalmente

Excluir todos os arquivos de "temp" e "% temp%" do sistema ajudou a resolver esse problema.

Abra o comando Executar (Windows + R), digite as strings acima e exclua todos os arquivos temporários.

Campeão
fonte
Obrigado! Depois de tentar de tudo, funcionou para mim.
user390480
1

Se você tentou todas as respostas disponíveis e ainda não conseguiu encontrar a resposta, isso pode resolver o problema. Se você tiver diferentes configurações de soluções como Debug, Release etc, defina o caminho de saída do projeto para 'bin' e compile o projeto. Reverta a alteração após compilar.

Caminho de saída do projeto

VS procura dlls na pasta bin

Naga Sailesh
fonte
1

Eu já havia tentado deletar o arquivo bin e obj e reiniciar o VS e não tive sorte.

Eu também já tive esse problema muitas vezes e é difícil resolvê-lo a cada vez. Freqüentemente, é devido ao arquivo web.config não ter a versão correta de uma das referências. Isso significa clicar na referência no Visual Studio para ver a versão na guia de propriedades e, em seguida, combiná-la com a versão nos arquivos web.config.

Outra maneira é (se possível) atualizar para uma versão posterior da estrutura .net e, em seguida, excluir os arquivos bin / obj e reiniciar o Visual Studio. Eu só posso supor que está mudando algo no

Uma verificação rápida da diferença entre o arquivo csproj não mostra nenhuma grande diferença ... Mas as diferenças que ele mostrou foram (adicionei (removi) para mostrar a linha antiga)

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> (remove)
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>(remove)
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>

No arquivo Web.Config (não aquele na Visualização)

<add key="webpages:Version" value="2.0.0.0" /> (remove)
<add key="webpages:Version" value="3.0.0.0"/>

Ele também adicionou (ao mesmo arquivo web.config), mas eu o removi manualmente

 <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

Finalmente, no console do gerenciador de pacotes, adicione update-package

Execute o site localmente e veja quaisquer erros de compilação que foram corrigidos pelo meu segundo parágrafo (correspondendo às versões das referências)

Dave
fonte
0

Atualizei as páginas da web: Versão na pasta ./Views/Web.Config, mas essa configuração também estava presente em web.config na raiz. Atualize ambos ou remova do web.config raiz

user1412699
fonte
0

Como já mencionado @Wilson Vallecilla. Siga as etapas abaixo para excluir o cache:

Siga o caminho abaixo para descobrir os arquivos:

C:\Users\your.name.here\AppData\Local\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

Fechei meu projeto, apaguei os arquivos daquele caminho e reabri meu projeto, limpei a solução e a construí novamente e o problema foi resolvido

Excluir seus arquivos ASP.NET temporários também ajuda. Arquivos ASP.NET C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary.

Isso funciona para mim.

Obrigado!

Trilok Pathak
fonte
0

Para MVC5, caso você esteja construindo um aplicativo do zero. Você precisa adicionar um arquivo web.config à pasta Views e colar o seguinte código nele.

<?xml version="1.0"?>
<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>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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>
</configuration>

Observe que para MVC 3 você terá que alterar a versão para 3.0.0.0 em

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

Pode ser necessário fechar e abrir a página * .cshtml novamente para ver as alterações.

Ashish Kaul
fonte