Visualização do Razor jogando "O nome 'modelo' não existe no contexto atual"

201

Após refatoração significativa no meu aplicativo MVC 4, o Razor mostra esse erro ao depurar o Views:

O nome 'modelo' não existe no contexto atual.

Esta é a linha de código incorreta:

@model ICollection<DataSourceByActive>

Eu sei que o uso de @modelestá correto.

Por que isso está acontecendo? Como posso corrigir isso?

Kehlan Krumme
fonte
A chave está "no contexto atual". Em algum lugar, um suporte não foi aberto ou fechado ... Portanto, sua declaração não está no contexto que você pensa que é.
Floris
1
Você pode adicionar o código do seu controlador juntamente com alguns exemplos de marcação do que você está tentando fazer?
scniro
Possível duplicado de O 'modelo' nome não existe no contexto atual em MVC3
Michael Freidgeim

Respostas:

245

Acho que você estragou o arquivo web.config que fica na pasta Views.

Crie um novo projeto direcionado para a mesma estrutura .NET e copie o arquivo Views / web.config na parte superior do projeto atual. Isso resolverá o seu problema.

Além disso, como Dudeman3000 comentou, se você tiver Áreas no seu projeto MVC, todas elas Views\web.configtambém terão arquivos.

Anirudha Gupta
fonte
20
lembre-se de que se você tiver Áreas no seu projeto MVC, todas elas também terão arquivos Views \ web.config!
precisa saber é o seguinte
6
Estranhamente, meu web.config no diretório views estava bom, mas o web.config do projeto tinha uma versão de páginas da Web 2.0.0. A detecção de erro falso desapareceu quando eu o fiz 3.0.0.
William T. Mallard
43
This will fix your problem.Isso não aconteceu.
Timwi
2
@AnirudhaGupta O que está em questão.
Timwi
1
Eu havia copiado um arquivo web.config válido para a minha pasta Views, mas não estava incluído no projeto.
Wildcat Matt
104

Verifique se você tem o seguinte no site Web.confige Web.configno diretório de visualizações na appSettingsseção

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

Para uso do MVC5:

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

(E existe apenas no Web.configarquivo principal .)

Alex
fonte
14
Obrigado! Para o MVC5, o número da versão precisa ser 3.0.0.0. (E existe apenas no arquivo Web.config principal .)
xec
Esta é a resposta correta que eu diria enquanto tentava em todos os lugares alterar a versão não, mas no final isso foi a única coisa que impedia que a inteligência da navalha funcionasse.
Shivam Chopra
6
Isso funcionou para mim. Eu tive que reiniciar o Visual Studio após essa alteração para que tudo funcionasse.
Ravvy
1
Eu tive esse problema com o MVC 5, o problema era que a chave existia, mas estava direcionando a versão em 2.0.0.0vez de 3.0.0.0. Mudar isso resolveu o problema. Obrigado!
vaindil
Eu usei isso e funcionou, mas apenas o adicionei aos modos de exibição web.config. O Intellisense surgiu logo após o reinício do VS.
Matt
48

Aqui está o que eu fiz:

  1. Feche o Visual Studio
  2. Exclua o arquivo SUO
  3. Reinicie o Visual Studio

O arquivo .suo é um arquivo oculto na mesma pasta que o arquivo de solução .svn e contém as Opções do Usuário do Visual Studio.

Mark Schultheiss
fonte
Sim, não há web.configarquivo para o ASP.NET Coreaplicativo, então isso funcionou para mim (também adicionamos algumas extensões para melhorar o intellisense).
VMAtm
2
Eu nem precisei excluir o arquivo SUO. Acabei de fechar e abrir o Visual Studio.
Jim S
Visual Studio 2019: sem arquivo suo, a exclusão da .vspasta ajudou.
Štěpán Havránek
Obrigado .. isso fez por mim. Aplicativo .net Core 2.0 mvc
roblem
2
Visual Studio 2019 aqui, feche e reabra corrigi-lo para mim. Obrigado.
precisa saber é o seguinte
26

Eu tive o mesmo problema, criei um novo projeto e copiei os arquivos web.config conforme recomendado na resposta de Gupta, mas isso não corrigiu as coisas para mim. Eu verifiquei a resposta de Alex e Liam, achei que essa linha deveria ter sido copiada do novo web.config, mas parece que o novo projeto em si não tinha essa linha (MVC5):

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

Adicionar a linha ao arquivo views / web.config resolveu o problema para mim.

Tarek Shawadfy
fonte
Isso acontece se você atualizou do asp.net versão 4.0.0 para 4.5.1. No meu caso, meu web.config principal estava mostrando páginas da web: Versão = 2.0.0.0, mas deveria ser 3.0.0.0. A atualização desse valor corrigiu o problema.
Veysel Ozdemir
15

Alterar a linha a seguir no web.config da pasta view resolveu o mesmo erro.

De

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

Para

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
vinayak hegde
fonte
1
Isso funcionou para mim também. Eu atualizei o razor para suportar C # 6 e o ​​MVC também deve ter sido atualizado. Verifique sua System.Web.Mvcreferência de montagem para confirmar a versão principal necessária.
James Wilkins
Eu tive o mesmo problema. fixação de todos a MVC, Navalha etc. montagens no web.config para x.0.0.0 tem coisas que trabalham para mim novamente
mamashare
@ JamesWilkins Nice, trabalhou para mim ty. Apenas uma coisa, exclua o arquivo .suo do projeto depois disso e reinicie o VS.
boa pegada! Eu estava enfrentando esse problema depois de atualizar o .net framework 4.0 para 4.6 e, obviamente, apontando para a versão incorreta do assembly.
Prashant
10

No meu caso, atualizei recentemente do MVC 4 para o MVC 5, o que prejudica bastante o web.config. Este artigo ajudou tremendamente.

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 conclusão é que você precisa verificar todas as suas referências de número de versão em seu web.config e Views / web.config para garantir que eles estejam referenciando as versões atualizadas corretas associadas ao MVC 5.

Justin Skiles
fonte
1
Se você atualizou do MVC 4 para o MVC 5, esta é a resposta a ser verificada. Ele identifica exatamente os problemas das versões, resolveu o meu problema e há pouco risco de quebrar alguma coisa.
R. Schreurs
10

Alterar para @Modelo de @model fez o trabalho para mim.

@model representa o tipo de objeto View Model. @Model representa o objeto View Model.

eaglei22
fonte
1
Eu gostaria de parar de esquecer isso! Obrigado por me lembrar!
Mike
1
A quantidade de vezes que tenho que procurar esse problema é frustrante. Mas fico feliz que seja uma correção simples!
Brendan Sluke 24/04
7

Eu encontrei uma solução. Se você deseja atualizar a versão razor ou o mvc 4 para 5, altere algumas linhas.

Código antigo em 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>

Substituído por

<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 deve ser mudança também.

ddagsan
fonte
6

No meu caso, o código a seguir se mostra útil. Coloque o código abaixo no arquivo Web.config na pasta Views.

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

Depois que o código for atualizado, limpe e reconstrua a solução. Eu espero que isso te ajude!

Prach
fonte
5

Nenhuma das respostas existentes funcionou para mim, mas descobri o que funcionou para mim comparando os .csprojarquivos de diferentes projetos. A edição manual a seguir no .csprojarquivo XML resolveu o problema do Razor-intellisense para mim, talvez isso possa ajudar alguém que tentou todas as outras respostas sem sucesso. Key é remover todas as instâncias do <Private>False</Private>no <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>

Não sei como as pessoas chegaram lá ou exatamente o que fazem, talvez alguém mais inteligente que eu possa adicionar essas informações. Fiquei feliz em finalmente resolver esse problema.

asontu
fonte
Obrigado pela sugestão, isso também funcionou para mim, por qualquer motivo
Scherling
Trabalhou para mim também.
12288 Alex
Essa foi a única opção que funcionou no meu caso. Troquei um projeto vs2010 para 2019 e funcionou como um encanto. Depois de salvar o csproj, tentei descomentar as tags como o arquivo original e ele ainda está funcionando ...
jefissu 17/02
3

Por alguma razão, meu web.config tinha 0.0.0.0 no 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>

mudar para 1.0.0.0 foi a solução:

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

Eu estava usando um projeto MVC4 com o Visual Studio 2019 - e o VS 2019 não suporta MVC 4 pronto para uso. Você precisa instalar isso.

Passos:

  • Abra o instalador do Visual studio (procure pelo Visual Studio Installer no Windows)
  • Clique em componentes individuais
  • Escreva "mvc" na caixa de pesquisa
  • Marque a caixa mvc4
  • Clique em "Modificar" no canto inferior direito

NOTA: Necessário para o fechamento do visual studio

insira a descrição da imagem aqui

Stephan Ryer
fonte
2

No meu caso, o problema era que, depois de atualizar o projeto do MVC 4 para o MVC 5, perdi de alguma forma uma alteração de versão no 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">            

Ainda tinha a versão antiga 2.0.0.0. Depois de alterar a versão para 3.0.0.0, tudo começou a funcionar corretamente.

Além disso, devido a esse problema, o Visual Studio 2015 Community Edition começava a bloquear a CPU (uso de 30 a 40% no modo inativo) toda vez que eu abria um arquivo .cshtml.

Mihai Caracostea
fonte
2

Eu tive o mesmo problema ao implantar em um Serviço de Aplicativo do Azure

No meu caso, foi porque ~ / Views / Web.config não foi incluído no projeto.

Funcionou no IIS Express, mas quando implantei no azure, recebi o mesmo erro. Por não ser incluído no arquivo .csproj, ele não foi implantado.

A solução foi garantir que ~ / Views / Web.config esteja incluído no projeto.

Se você for ao Solution Explorer e clicar no ícone "Mostrar todos os arquivos", abra o Views e poderá ver um arquivo Web.config não incluído lá.

Adicione, publique novamente e Bob é seu tio.

Gburton
fonte
1

Para mim, o problema era uma versão .NET conflitante em uma das bibliotecas que eu recentemente importei. A biblioteca que eu importei foi compilada para 4.5.2 e o site ASP.NET MVC que eu importei para o 4.5 direcionado. Depois de recompilar a lib para 4.5, o site seria compilado.

Além disso, não houve erros de compilação, mas o problema estava sendo relatado como um "aviso". Portanto, não deixe de ler todos os avisos, se houver algum.

Big Gunz
fonte
1

Para resolver isso, certifiquei-me de atualizar para a versão mais recente do MVC usando o NuGet e o Console do Gerenciador de Pacotes.

Pacote de instalação Microsoft.AspNet.Mvc -Version 5.2.4

Em seguida, atualizado para a versão mais recente do Razor

Pacote de instalação Microsoft.AspNet.Razor -Version 3.2.4

Então mudei todos os arquivos web.config para refletir a alteração. Como você verá abaixo:

No arquivo web.config principal, verifique se as páginas da web: version estão corretas. É aqui que ele pode ser encontrado (ignore as outras chaves):

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

Em seguida, procure as outras versões listadas nas montagens, verifique a versão da montagem com a versão da biblioteca listada nas referências do seu projeto! Você pode não precisar de tudo isso.

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

O tempo de execução assemblyBinding deve mostrar a "nova versão" também, veja onde se lê NewVersion 5.2.4.0? Mas também verifique todas as outras versões.

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

ENTÃO, na seção Views Web.Config, verifique se o Razor é a versão correta:

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

E Lastlt, há a seção Páginas do Views Web.Config

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

se você resolver esse problema sem nenhuma alteração no seu projeto como eu, precisará alterar o seu web.config que foi colocado na pasta View. basta escrever uma nova linha digitando ou Remover uma linha vazia. então salve seu web.config e reconstrua. meu problema resolvido com esta solução

hossein andarkhora
fonte
0

Eu estava tentando adicionar uma exibição que estava fora da minha pasta "Views" (apenas para organizar meu código de forma diferente, eu acho), quando tive esse problema. A criação da visualização dentro de Views (como por convenção) a resolveu.

Svein Terje Gaup
fonte
0

No meu caso, estava faltando @ no início do 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
fonte
Isso é importante; Não sei por que você foi derrotado.
FlyingV 22/02/19
1
Porque não tem nada a ver com a pergunta original.
Ryan
0

No meu caso, removi o arquivo web.config da pasta Views por acidente. Eu adicionei de volta e estava tudo bem.

Muçulmano Hady
fonte
-3

Resolvi o problema usando em @Modelvez de apenas modelao imprimir as variáveis.

usuario
fonte
-8

É provável que você use no código uma variável chamada model.

agorshkov23
fonte