119 votes

Le nom 'model' 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, j'ai obtenu une erreur : "Le nom 'model' 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 web.config dans le dossier view, mais cela n'a pas réglé le problème.

Est-ce qu'il y a quelque chose que j'ai manqué ?

0 votes

Si vous cherchez une solution MVC4, la réponse d'Adam est valable, vous devez trouver le numéro de version correct dans votre web.config principal et l'utiliser ici. MVC4 Views Folder web.config manquait la ligne <host> et copier un à partir de Root web.config (il pourrait avoir d'autres valeurs différentes donc vérifier le vôtre) et le mettre dans Views. Ensuite, nous avons fermé le projet et le recharger dans Visual Studio et cela a fait l'affaire.

239voto

Adam Terlson Points 6522

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 les paramètres du web.config. <host> línea.

Je me suis retrouvé dans la même situation que toi, et après quelques recherches, j'ai trouvé la cause du problème !

Vous devez inclure le web.config MVC3 par défaut pour le dossier Views. MVC3 en a deux : un dans le Root de votre application, et un pour le dossier Views. Ce dernier comporte une section pour les espaces de noms inclus. Assurez-vous que le vôtre ressemble à quelque chose comme ceci :

  <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 copier le web.config créé pour vous dans votre dossier views.

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

1 votes

Je ne peux pas marquer cela comme étant la réponse, mais c'était aussi mon problème. J'ai oublié d'ajouter ces sections au web.config.

0 votes

Ouais, j'aimerais pouvoir marquer le tien comme étant la réponse. J'étais bloqué sur ce point depuis un moment (j'ai abandonné après l'échec de ma première tentative de conversion vers Razor), et c'était le problème depuis le début. Merci !

3 votes

Cela ne fonctionne pas pour moi. Ou, du moins, parfois j'obtiens intellisense et parfois non, même si tout cela est défini dans le web.config du dossier Views.

31voto

Paul Syfrett Points 398

J'ai rencontré le même problème lorsque j'ai créé une nouvelle zone pour organiser mes pages. Ma structure était la suivante :

WebProject

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
- [] Controllers
- [] Views
    - Web.config
- Web.config

Les vues créées dans le dossier Views sous le WebProject ont bien fonctionné, mais les vues créées sous le NewArea ont produit l'erreur suivante :

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

Pour résoudre ce problème, j'ai copié le web.config dans le dossier Views sous le WebProject vers le dossier Views dans le NewArea. Voir ci-dessous.

WebProject

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
            - **Web.config**
- [] Controllers
- [] Views
    - Web.config
- Web.config

J'ai rencontré ce problème parce que j'ai créé manuellement cette nouvelle zone en utilisant Ajouter -> Nouveau dossier pour ajouter les dossiers. J'aurais dû cliquer avec le bouton droit de la souris sur le projet et sélectionner Add -> Area. Visual Studio se serait alors occupé de configurer correctement la zone.

2 votes

+1 ... Je viens de remarquer que, pour une raison quelconque, le fichier web.config n'était pas inclus, je suis heureux d'avoir trouvé votre réponse pour résoudre mon problème.

2 votes

Je me rends compte que ce message est vieux, mais j'ai eu le même problème aujourd'hui, alors je voulais vous remercier pour cette réponse :).

0 votes

J'ai eu le même problème et la même solution. Mon Views/Web.config faisait référence System.Web.Mvc.MvcWebRazorHostFactory version 5.0.0.0, et j'avais une zone tierce faisant référence à la v4.0 et dont les vues coopéraient. J'ai mis Views/Web.config Je suis revenu à la version 4.0 et tout a fonctionné.

11voto

Greg Jackman Points 378

Si vos vues se trouvent dans un assemblage de bibliothèque de classes, ce qui est utile pour la réutilisation des vues partagées entre les projets, alors faire ce qu'Adam suggère pourrait ne pas être suffisant. J'ai toujours eu des problèmes même avec cela.

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 web.config de votre dossier views :

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

Ça a marché 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 MVC.

1 votes

S'agit-il des fichiers web.config de votre projet web, ou des fichiers web.config de votre bibliothèque de classes ?

7voto

James Lawruk Points 8106

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

1 votes

Merci ! J'étais en train de devenir folle avec le même problème et c'était la réponse ;-)

0 votes

Cool ! Je me souviens d'être devenu fou moi aussi. :)

0 votes

J'avais quelques fichiers .cshtml dans un dossier du répertoire racine, ce qui a fait échouer le seul dossier de mes vues... while(true) { bashHeadToWall ; }. Merci.

5voto

Bork Blatt Points 2143

Alors que vous déclarez le modèle en haut de la vue en utilisant un code comme celui-ci :

@model MyModel

vous devez mettre une majuscule à vos références ci-dessous, par exemple :

@Html.Encode(Model.MyDisplayValue)

Je pense qu'un web.config manquant dans le dossier Views serait la cause principale de ce problème, mais si cela est corrigé et que le problème persiste, vérifiez que vous utilisez Modèle pas modèle pour y faire référence dans la source.

1 votes

Cela résout l'erreur lorsque le problème est que vous essayez de référencer votre modèle dans votre propre code dans la vue, comme lorsque vous créez votre propre aide qui ne repose pas sur des expressions lambda, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X