web-dev-qa-db-fra.com

Vue rasoir jetant "Le nom 'modèle' n'existe pas dans le contexte actuel"

Après un refactoring important dans mon application MVC 4, Razor affiche cette erreur lors du débogage des vues:

Le nom 'modèle' n'existe pas dans le contexte actuel.

C'est la ligne de code incriminée:

@model ICollection<DataSourceByActive>

Je sais que l'utilisation de @model est correcte.

Pourquoi cela arrive-t-il? Comment puis-je le réparer?

149
Kehlan Krumme

Je pense que vous avez foiré le fichier web.config qui se trouve dans le dossier Views.

Créez un nouveau projet ciblant le même framework .NET et copiez son fichier Views/web.config par-dessus celui de votre projet actuel. Cela résoudra votre problème.

En outre, comme l'a commenté Dudeman3000, si vous avez des zones dans votre projet MVC, elles ont toutes des fichiers Views\web.config.

205
Anirudha Gupta

assurez-vous que les éléments suivants sont présents dans votre site web.config et dans le répertoire views web.config dans la section appSettings.

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

Pour MVC5 utiliser:

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

(Et il n'existe que dans le fichier principal Web.config.)

83
Alex

Voici ce que j'ai fait:

  1. Fermer Visual Studio 
  2. Supprimer le fichier SUO
  3. Redémarrer Visual Studio

Le fichier .suo est un fichier caché situé dans le même dossier que le fichier de solution .svn et contient les options utilisateur de Visual Studio.

35
Mark Schultheiss

J'ai eu le même problème, j'ai créé un nouveau projet et copié les fichiers web.config comme recommandé dans la réponse de Gupta, mais cela ne réglait rien pour moi. J'ai vérifié la réponse d'Alex et Liam, je pensais que cette ligne devait avoir été copiée depuis le nouveau web.config, mais il semble que le nouveau projet lui-même ne contienne pas cette ligne (MVC5):

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

L'ajout de la ligne au fichier views/web.config a résolu le problème pour moi.

24
Tarek Shawadfy

La modification de la ligne suivante dans web.config du dossier de vue a résolu la même erreur.

De

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

À

<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
11
vinayak hegde

Dans mon cas, j'ai récemment mis à jour de MVC 4 à MVC 5, ce qui bousille web.config. Cet article a énormément aidé.

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-et web-api-2

En fin de compte, vous devez vérifier toutes vos références de numéro de version dans votre Web.config et dans Views/web.config pour vous assurer qu'elles référencent les versions mises à niveau appropriées associées à MVC 5.

10
Justin Skiles

J'ai trouvé une solution… .. Si vous voulez mettre à jour la version de rasoir ou MVC 4 à 5, modifiez quelques lignes.

Ancien code dans 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>

Remplacé par

<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 doit aussi être un changement.

6
ddagsan

Dans mon cas, le code suivant s'avère utile. Placez le code ci-dessous dans le fichier Web.config sous le dossier Vues.

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

Une fois le code mis à jour, assurez-vous de nettoyer et de reconstruire la solution. J'espère que cela vous aidera!

5
Prach

Passer de @model à @Model a fait le travail pour moi. 

@model représente le type d'objet View Model. @Model représente l'objet View Model.

5
eaglei22

Aucune des réponses existantes n'a fonctionné pour moi, mais j'ai trouvé ce que a fait a fonctionné pour moi en comparant les fichiers .csproj de différents projets. La modification manuelle suivante du fichier XML .csproj a résolu le problème Razor-intellisense pour moi. Cela peut peut-être aider quelqu'un d'autre qui a essayé toutes les autres réponses sans succès. La clé consiste à supprimer toutes les occurrences de <Private>False</Private> dans les <Reference>:

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

Je ne sais pas comment ceux-ci sont arrivés là ou exactement ce qu'ils font, peut-être qu'une personne plus intelligente que moi peut ajouter cette information. J'étais juste heureux de finalement résoudre ce problème.

4
funkwurm

J'ai rencontré le même problème lors du déploiement sur Azure App Service.

Dans mon cas, c'était parce que ~/Views/Web.config n'était pas inclus dans le projet.

Cela fonctionnait dans IIS Express, mais la même erreur s'est produite lors de mon déploiement sur Azure. Ne faisant pas partie du fichier .csproj, il n'a pas été déployé.

La solution consistait à s'assurer que ~/Views/Web.config est inclus dans le projet.

Si vous allez dans l'explorateur de solutions et cliquez sur l'icône "Afficher tous les fichiers", puis ouvrez Vues, ​​un fichier Web.config non inclus risque de s'afficher.

Ajoutez-le, republiez-le et Bob est votre oncle.

1
gburton

Pour une raison quelconque, mon composant Web.config avait 0.0.0.0 dans l'attribut 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>

passer à 1.0.0.0 était la solution:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
  </dependentAssembly>
1
chemark

Pour moi, le problème était une version .NET en conflit dans l’une des bibliothèques que j’avais récemment importées. La bibliothèque que j'ai importée a été compilée pour la version 4.5.2 et le site ASP.NET MVC que j'ai importé dans la version 4.5 ciblée. Après avoir recompilé ladite bibliothèque pour la version 4.5, le site Web serait compatible. 

De plus, il n'y avait pas d'erreur de compilation, mais le problème était signalé comme un "avertissement". Veillez donc à lire tous les avertissements s’il en existe.

1
Big Gunz

Dans mon cas, le problème était qu’après la mise à niveau du projet de MVC 4 à MVC 5, j’ai manqué une modification de version dans le fichier 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">            

Il avait toujours l'ancienne version 2.0.0.0. Après avoir changé la version 3.0.0.0, tout a commencé à fonctionner correctement.

De plus, à cause de ce problème, Visual Studio 2015 Community Edition commencerait à critiquer le processeur (30 à 40% d'utilisation au repos) à chaque fois que j'ouvrirais un fichier .cshtml.

1
Mihai Caracostea

si vous prenez ce problème sans aucune modification sur votre projet, vous devez modifier votre configuration web qui est placée dans le dossier de visualisation. puis enregistrez votre web.config et reconstruisez . mon problème résolu avec cette solution

0
hossein andarkhora

J'essayais d'ajouter une vue qui se trouvait en dehors de mon dossier "Vues" (juste pour organiser mon code différemment, je suppose), quand j'ai eu ce problème. La création de la vue à l'intérieur de Vues (comme par convention) l'a résolue.

0
Svein Terje Gaup

Afin de résoudre ce problème, je me suis assuré d'avoir mis à niveau vers la dernière version de MVC à l'aide de NuGet et de la console de gestion des packages.

Package d'installation Microsoft.AspNet.Mvc -Version 5.2.4

Puis mis à niveau vers la dernière version de Razor

Package d'installation Microsoft.AspNet.Razor -Version 3.2.4

Ensuite, j'ai modifié tous les fichiers web.config pour refléter le changement. Comme vous le verrez ci-dessous:

Dans le fichier web.config principal, assurez-vous que la page Web: version est correcte. C'est où il peut être trouvé (ignorer les autres clés):

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

Recherchez ensuite les autres versions répertoriées dans les assemblys, vérifiez la version de l'assembly par rapport à la version de la bibliothèque répertoriée dans les références de votre projet! Vous n'avez peut-être pas besoin de tout cela.

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

Runtime assemblyBinding devrait afficher la "nouvelle version" également, voir où se trouve NewVersion 5.2.4.0? Mais vérifiez aussi toutes les autres versions.

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

ALORS dans la section Views Web.Config, assurez-vous que Razor est la version correcte:

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

Et enfin, il y a la section Pages de 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>
0
Keith Aymar

Dans mon cas, j'ai supprimé le fichier web.config du dossier Views par accident. Je l'ai rajouté et c'était correct.

0
Reza

Dans mon cas, il me manquait @ au début de la 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>
    }
0
Sebastian Castaldi