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?


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

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.


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


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.


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.


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

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.


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.


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.


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!


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.


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>

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


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.


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.


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.


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>

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


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.


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

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.


-3

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


-8

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.