web-dev-qa-db-fra.com

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

J'ai ajouté une page cshtml dans un projet. Lorsque j'ai essayé d'y ajouter la déclaration suivante, une erreur s'est produite: "Le nom 'modèle' n'existe pas dans le contexte actuel".

@model xyz.abc.SomeClass

J'ai vérifié les références, elles sont toutes en place. J'ai ajouté un fichier web.config dans le dossier d'affichage, mais cela n'a pas résolu le problème.

Y a-t-il quelque chose qui me manque?

118
user602737

Mise à jour: si vous utilisez une version plus récente de MVC, le même processus s'applique. Assurez-vous simplement d'utiliser le numéro de version correct dans la ligne <Host> De web.config.

Eh bien, je me suis retrouvé dans la même situation que vous et après quelques recherches supplémentaires, j'ai découvert le problème!

Vous devez inclure le fichier web.config MVC3 par défaut pour le dossier Vues. MVC3 en a deux: un à la racine pour votre application et un pour le dossier de vues. Cela a une section pour les espaces de noms inclus. Assurez-vous que le vôtre ressemble à quelque chose comme ça:

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

Je vous suggère de créer un nouveau projet MVC3, puis de simplement copier le fichier web.config créé pour vous dans votre dossier de vues.

Important Une fois que vous avez fait cela, vous devez fermer le fichier et le rouvrir. Voila! Intellisense!

238
Adam Terlson

J'ai rencontré le même problème lorsque j'ai créé un nouvel espace pour organiser mes pages. Ma structure ressemble un peu à:

WebProject

  • [] Zones
    • [] Nouvelle zone
      • [] Contrôleurs
      • [] Vues
  • [] Contrôleurs
  • [] Vues
    • Web.config
  • Web.config

Les vues créées dans le dossier Vues sous WebProject ont bien fonctionné, mais les vues créées sous NewArea ont généré l'erreur suivante: "Le nom 'modèle' n'existe pas dans le contexte actuel." Pour résoudre ce problème, j'ai copié le fichier web.config dans le dossier Vues sous WebProject dans le dossier Vues dans NewArea. Voir ci-dessous.

WebProject

  • [] Zones
    • [] Nouvelle zone
      • [] Contrôleurs
      • [] Vues
        • Web.config
  • [] Contrôleurs
  • [] Vues
    • Web.config
  • Web.config

Je me suis heurté à cela parce que j'ai créé manuellement cette nouvelle zone en utilisant Ajouter -> Nouveau dossier pour ajouter les dossiers. Je devrais bien cliquer sur le projet et choisir Ajouter -> Zone. Ensuite, Visual Studio aurait pris soin de configurer correctement la zone.

29
Paul Syfrett

Si vos vues se trouvent dans une bibliothèque de classe Assembly, ce qui est utile pour réutiliser des vues partagées entre les projets, il ne suffit pas de faire ce que suggère Adam. J'ai toujours eu des problèmes, même avec ça.

Essayez ceci dans votre web.config à la racine de votre projet:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <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>
  </configSections>
  <system.web.webPages.razor>
    <Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add Assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add Assembly="System.Web.Helpers, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add Assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add Assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
</configuration>

Et ceci dans le fichier web.config de votre dossier de vues:

<?xml version="1.0"?>

<configuration>
  <configSections>
    <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>
  </configSections>

  <system.web.webPages.razor>
    <Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.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>
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add Assembly="System.Web.Mvc, Version=4.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>

Cela a fonctionné pour moi. J'ai maintenant intellisense et aucune erreur de compilation sur mes vues dans un projet non-MVC que je peux ensuite référencer à partir de plusieurs sites Web MVC.

11
Greg Jackman

J'ai rencontré ce problème lorsque j'avais par inadvertance une copie du fichier de vue (About.cshtml) pour la route/about dans le répertoire racine. (Pas le dossier de vues) Une fois que j'ai déplacé le fichier de la racine, le problème a disparu.

7
James Lawruk

Avait des problèmes similaires en utilisant VS2012 et VS2013.
L'ajout de la ligne suivante à <appSettings> dans le fichier Web.config principal a fonctionné:

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

Si la ligne existait déjà mais que la version 2.0.0.0 était définie, la remplacer par la version 3.0.0.0 fonctionnait.

7
user1023602

Mise à jour: 5/5/2015 Pour votre projet MVC 5, vous devez définir la version sur 5.0.0.0 dans votre /views/web.config.

<system.web.webPages.razor>
     <Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</system.web.webPages.razor>
6
phanf

Pendant que vous déclarez le modèle en haut de la vue, utilisez le code suivant:

@model MyModel

vous devez capitaliser vos références ci-dessous, par exemple:

@Html.Encode(Model.MyDisplayValue)

Je crois qu'un Web.config manquant dans le dossier Vues en serait la cause principale, mais si cela est résolu et que le problème persiste, vérifiez que vous utilisez Modèle, pas modèle pour s'y référer dans le source.

5
Bork Blatt

J'ai rencontré ce problème aussi. Mes circonstances étaient un peu différentes.

  1. L'un de mes dossiers de vue a été accidentellement déplacé vers le répertoire racine de mon projet. Cela a conduit à la route project_root/SignUp/ViewName correspondant avant project_root/Views/SignUp/ViewName. Cela a causé le @model Erreur.

  2. Après avoir déplacé les vues à l'emplacement approprié, le répertoire a été en quelque sorte recréé à la racine du projet. Cette fois, vide. /SignUp/ViewName a fonctionné, mais /SignUp/ jeta un 403 - Forbidden: Access is denied. Erreur. Le dossier entier doit être supprimé de la racine du projet.

J'espère que ça aidera quelqu'un. J'ai passé des heures à croire que le problème provenait de notre récente mise à niveau de MVC 3 à MVC 4. Juste une remarque: les problèmes de mise à niveau ne devraient se produire qu'entre MVC 2 et MVC 3. Si vous voyez ce problème dans les versions ultérieures, c'est probablement pas à cause de la mise à niveau.

3
Alexander Pritchard

C'est une erreur horrible mais:

Assurez-vous que vous avez Web.config fichiers dans votre View à Remote. Peut-être avez-vous oublié de le télécharger à l'aide des filtres de votre programme FTP.

2
Pcodea Xonos

Il m'a fallu beaucoup de temps pour résoudre ce problème, mais finalement j'espère l'avoir résolu sur MVC, ce qui est similaire:

J'ai réinstallé ASP.NET 4.5 ( http://www.asp.net/downloads )

J'ai suivi le tutoriel de mise à niveau sur http://www.asp.net/whitepapers/mvc4-release-notes

MAIS ce paragraphe mentionné est faux pour moi

System.Web.Mvc, Version=4.0.0.0
System.Web.WebPages, Version=2.0.0.0
System.Web.Helpers, Version=2.0.0.0
System.Web.WebPages.Razor, Version=2.0.0.0

Parce que j'ai Razor dans System.Web.Razor , j'ai donc changé l'espace de noms du rasoir en System.Web.Razor.

Ajoutez ceci à votre web.config

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

J'ai ajouter la référence d'assemblage à toutes ces assemblées ci-dessus

Recherchez l'élément ProjectTypeGuids et remplacez {E53F8FEA-EAE0-44A6-8774-FFD645390401} par {E3E379DF-F4C6-4180-9B81-6769533ABE47}.

C'est tout.

2
Tomas Kubes

Il me manquait web.config sous Areas/MyArea/Views/web.config. Une fois ajouté cela a bien fonctionné. C'était avec MVC 5 et .NET4.5

1
Victor

Vérifiez votre fichier de configuration sur le répertoire views. dans l'ajouter la clé pour MVC 4/5

0
sansalk

J'ai le même problème après la mise à jour des paquets. J'ai fait tout ce que vous avez écrit ci-dessus dans cette rubrique, mais la couleur rouge sous-jacente du mot clé de modèle n'a pas disparu. Plus tard, solution trouvée: juste dossier 'package' supprimé à partir du répertoire de mon projet et reconstruit, autorisant entre-temps NuGet à restaurer les packages manquants. Rafraîchi, et c'est fait!

0
Peter.k

Pour moi, c'était le problème. Tout ce bloc était absent de la section.

  <assemblies>
    <add Assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add Assembly="System.Web.Helpers, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add Assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add Assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
  </assemblies>
0
Kevin Dark

Vérifiez que votre fichier web.config doit exister dans les fichiers publiés

0
Arash Farahani

Il y a aussi une autre raison. Dans mon cas, j'avais copié un fichier index.cshtml dans le dossier racine Web (en dehors du dossier Views) en tant que sauvegarde à partir du serveur distant.

Donc, je n'arrêtais pas de changer mon /views/web.config, je changeais toujours de /views/home/index.cshtml et l'erreur continuait de se produire ... jusqu'à ce que je découvre le /index.cshtml en dehors du dossier views, je le supprimai et bien sûr, tout est revenu à la normale!

0
Nestor

Réinstaller la pépite résout le problème pour moi

PM> Install-Package Microsoft.AspNet.Razor - Version 3.2.3

0
pixelagent

J'ai rencontré le même problème, mais dans mon cas, la seule chose qui a changé, c'est que j'avais désinstallé Visual Studio 2012 et installé Visual Studio 2013. J'ai ouvert notre solution, mais je continuais à obtenir le même The name 'model' does not exist in current context _ erreur dans chaque vue Razor.

Mon collègue a suggéré de rechercher des mises à jour pour VS2013. Après avoir installé le VS2013 Update 1, j'ai cessé d’obtenir cette erreur.

0
John Washam

Je faisais face au même problème et je trouve ensuite une solution. La solution est:

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

Le fichier . Suo est un fichier caché dans le même dossier que le fichier . Svn. J'espère que ça va marcher!

0
Arsman Ahmad