Razor View jetant "Le nom 'modèle' n'existe pas dans le contexte actuel"

201

Après une refactorisation importante dans mon application MVC 4, et Razor affiche cette erreur lors du débogage des vues:

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

Ceci est la ligne de code incriminée:

@model ICollection<DataSourceByActive>

Je sais que l'utilisation de @modelest correcte.

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

Kehlan Krumme
la source
La clé est "dans le contexte actuel". Quelque part, une parenthèse n'a pas été ouverte ou fermée ... Votre déclaration n'est donc pas dans le contexte que vous pensez qu'elle est.
Floris
1
Pouvez-vous ajouter le code de votre contrôleur avec un exemple de balisage de ce que vous essayez de faire?
scniro
Le doublon possible du nom «modèle» n'existe pas dans le contexte actuel dans MVC3
Michael Freidgeim

Réponses:

245

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 au-dessus de 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 Views\web.configégalement toutes des fichiers.

Anirudha Gupta
la source
20
rappelez-vous que si vous avez des zones dans votre projet MVC, elles ont toutes aussi des fichiers Views \ web.config!
Dudeman3000
6
Étrangement, mon fichier web.config dans le répertoire des vues était correct, mais le fichier web.config du projet avait une version de pages Web 2.0.0. La détection de fausses erreurs a disparu quand je l'ai fait 3.0.0.
William T. Mallard
43
This will fix your problem.Il n'a pas.
Timwi
2
@AnirudhaGupta Celui de la question.
Timwi
1
J'avais copié un fichier web.config valide dans mon dossier Views mais il n'était pas inclus dans le projet.
Wildcat Matt
104

Assurez-vous que vous disposez des éléments suivants dans votre Web.configrépertoire de sites et de vues Web.configdans la appSettingssection

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

Pour l'utilisation MVC5:

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

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

Alex
la source
14
Merci! Pour MVC5, le numéro de version doit être 3.0.0.0. (Et il n'existe que dans le fichier Web.config principal .)
xec
C'est la bonne réponse, je dirais que j'ai essayé partout de changer la version non, mais à la fin, c'était la seule chose qui empêchait l'intelligence du rasoir de fonctionner.
Shivam Chopra
6
Cela a fonctionné pour moi. J'ai dû redémarrer Visual Studio après ce changement pour que tout fonctionne.
Ravvy
1
J'ai eu ce problème avec MVC 5, le problème était que la clé existait mais visait 2.0.0.0plutôt la version 3.0.0.0. Changer cela a résolu le problème. Je vous remercie!
vaindil
Je l'ai utilisé et cela a fonctionné mais je ne l'ai ajouté qu'aux vues web.config. Intellisense est venu juste après un redémarrage de VS.
Matt
48

Voici ce que j'ai fait:

  1. Fermez Visual Studio
  2. Supprimer le fichier SUO
  3. Redémarrez Visual Studio

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

Mark Schultheiss
la source
Ouais, il n'y a pas de web.configfichier pour l' ASP.NET Coreapplication, donc cela a fonctionné pour moi (également ajouté quelques extensions pour l'intellisense amélioré).
VMAtm
2
Je n'ai même pas eu à supprimer le fichier SUO. Je viens de fermer et d'ouvrir Visual Studio.
Jim S
Visual Studio 2019: aucun fichier suo, la suppression du .vsdossier a aidé.
Štěpán Havránek
Merci .. cela l'a fait pour moi. Application mvc .net Core 2.0
roblem
2
Visual Studio 2019 ici, fermez et rouvrez le corrigé pour moi. Merci.
JordanGW
26

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 n'a pas réglé les choses pour moi. J'ai vérifié la réponse d'Alex et Liam, je pensais que cette ligne devait avoir été copiée à partir du nouveau web.config, mais il semble que le nouveau projet lui-même n'ait 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.

Tarek Shawadfy
la source
Celui-ci se produit si vous avez mis à niveau la version 4.0.0 d'asp.net vers 4.5.1. Dans mon cas, mon web.config principal montrait des pages Web: Version = 2.0.0.0 mais elle devrait être 3.0.0.0. La mise à jour de cette valeur a résolu le problème.
Veysel Ozdemir
15

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" />
vinayak hegde
la source
1
Cela a également fonctionné pour moi. J'avais mis à niveau le rasoir pour prendre en charge C # 6 et MVC doit également avoir été mis à jour. Vérifiez votre System.Web.Mvcréférence d'assemblage pour confirmer la version principale dont vous avez besoin.
James Wilkins
J'ai eu le même problème. la correction de tous les assemblages MVC, Razor etc. dans web.config à x.0.0.0 a fait fonctionner les choses à nouveau pour moi
mamashare
@JamesWilkins Nice, a travaillé pour moi ty. Juste une chose, supprimez votre fichier .suo de projet après cela et redémarrez VS.
bonne prise! J'étais confronté à ce problème après avoir mis à niveau le framework .net 4.0 vers la version 4.6 et en pointant évidemment vers une mauvaise version de l'assembly.
prashant
10

Dans mon cas, j'ai récemment mis à jour de MVC 4 vers MVC 5, ce qui gâche assez mal le 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-and-web- api-2

L'essentiel est que vous devez vérifier toutes vos références de numéro de version dans votre web.config et Views / web.config pour vous assurer qu'ils font référence aux versions mises à niveau correctes associées à MVC 5.

Justin Skiles
la source
1
Si vous êtes passé de MVC 4 à MVC 5, voici la réponse à vérifier. Il identifie exactement les problèmes de versions, résout mon problème et il n'y a pas de risque de casser quoi que ce soit.
R. Schreurs
10

Changer pour @Model de @model a fait le travail pour moi.

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

eaglei22
la source
1
Je souhaite que j'arrête de l'oublier! Merci de me le rappeler!
Mike
1
Le nombre de fois où je dois rechercher ce problème est frustrant. Mais je suis heureux que ce soit une solution simple!
Brendan Sluke
7

J'ai trouvé une solution. Si vous souhaitez mettre à jour la version du rasoir ou mvc 4 à 5, changez certaines 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 changer.

ddagsan
la source
6

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!

Prach
la source
5

Aucune des réponses existantes n'a fonctionné pour moi, mais j'ai trouvé ce qui a fonctionné pour moi en comparant les .csprojfichiers de différents projets. L'édition manuelle suivante du .csprojfichier XML a résolu le problème Razor-intellisense pour moi, peut-être que cela peut aider quelqu'un d'autre qui a essayé toutes les autres réponses en vain. La clé est de supprimer toutes les instances de <Private>False</Private>dans le <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 y sont arrivés ni exactement ce qu'ils font, peut-être que quelqu'un de plus intelligent que moi peut ajouter ces informations. J'étais juste heureux de pouvoir enfin résoudre ce problème.

asontu
la source
Merci pour la suggestion, cela a aussi fonctionné pour moi, pour quelque raison que ce soit
Scherling
A aussi fonctionné pour moi.
Alex
C'était la seule option qui fonctionnait dans mon cas. J'ai changé un projet vs2010 en 2019 et j'ai travaillé comme un charme. Après avoir enregistré le csproj, j'ai essayé de décommenter les balises comme le fichier d'origine, et cela fonctionne toujours ...
jefissu
3

Pour une raison quelconque, mon 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>

le passage à 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>
chemark
la source
3

J'utilisais un projet MVC4 avec Visual Studio 2019 - et il s'est avéré que VS 2019 ne prend pas en charge MVC 4 prêt à l'emploi. Vous devez l'installer.

Pas:

  • Ouvrez le programme d'installation de Visual studio (recherchez le programme d'installation de Visual Studio dans Windows)
  • Cliquez sur les composants individuels
  • Écrivez "mvc" dans la boîte de recherche
  • Cochez la case mvc4
  • Cliquez sur "Modifier" en bas à droite

REMARQUE: Obligatoire pour la fermeture de Visual Studio

entrez la description de l'image ici

Stephan Ryer
la source
2

Dans mon cas, le problème était qu'après la mise à niveau du projet de MVC 4 vers MVC 5, j'ai en quelque sorte manqué un changement de version dans 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 en 3.0.0.0, tout a commencé à fonctionner correctement.

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

Mihai Caracostea
la source
2

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

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

Cela a fonctionné dans IIS Express, mais lorsque j'ai déployé sur azure, j'ai eu la même erreur. N'étant pas inclus dans le fichier .csproj, il n'a pas été déployé.

La solution était de 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 les vues, vous pouvez voir un fichier Web.config non inclus en dessous.

Ajoutez-le, republiez et Bob est votre oncle.

gburton
la source
1

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

De plus, il n'y a pas eu d'erreurs de compilation, mais le problème a été signalé comme un "avertissement". Assurez-vous donc de lire tous les avertissements, le cas échéant.

Big Gunz
la source
1

Afin de résoudre ce problème, je me suis assuré que j'étais mis à niveau vers la dernière version MVC à l'aide de NuGet et de la console Package Manager.

Install-Package Microsoft.AspNet.Mvc -Version 5.2.4

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

Install-Package Microsoft.AspNet.Razor -Version 3.2.4

Ensuite, j'ai changé 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 version des pages Web: est correcte. C'est où il peut être trouvé (ignorez 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'aurez 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 également montrer la "newversion", voir où il lit NewVersion 5.2.4.0? Mais vérifiez également 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 Vues 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 Lastlt, il y a la section Pages des vues 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
la source
1

si vous prenez ce problème sans aucun changement sur votre projet comme moi, vous devez changer votre web.config qui a été placé dans View Folder. il suffit d'écrire une nouvelle ligne en entrant ou en supprimant une ligne vide. puis enregistrez votre web.config et reconstruisez. mon problème résolu avec cette solution

hossein andarkhora
la source
0

J'essayais d'ajouter une vue qui était 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 des vues (comme par convention) l'a résolu.

Svein Terje Gaup
la source
0

Dans mon cas, je manquais @ 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>
    }
Sebastian Castaldi
la source
C'est important; Je ne sais pas pourquoi vous avez été déçu.
FlyingV
1
Parce que cela n'a rien à voir avec la question d'origine.
Ryan
0

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

Hady musulman
la source
-3

J'ai résolu le problème en utilisant @Modelau lieu de simplement modellors de l'impression des variables.

pseudo
la source
-8

Vous êtes susceptible d'utiliser dans le code une variable nommée model.

agorshkov23
la source