「モデル」という名前はMVC3の現在のコンテキストに存在しません


119

プロジェクトにcshtmlページを追加しました。次の宣言を追加しようとすると、「名前「モデル」は現在のコンテキストに存在しません」というエラーが表示されます。

@model xyz.abc.SomeClass

参照を確認しましたが、すべて揃っています。ビューフォルダーにweb.configを追加しましたが、修正されませんでした。

何か足りないものはありますか?


MVC4ソリューションを探している場合、Adamからの回答は有効です。メインのweb.configから正しいバージョン番号を見つけ、ここで同じバージョン番号を使用する必要があります。MVC4ビューフォルダーweb.configに<host>行がありませんでした。ルートweb.configから1つをコピーし(他の値が異なる可能性があるため、値を確認してください)、ビューに配置しました。次に、プロジェクトを閉じてVisual Studioに再読み込みしました。
Farrukh Subhani 2013年

回答:


238

更新:MVCの新しいバージョンを使用している場合は、同じプロセスが適用されます。必ず、web.configの<host>行で正しいバージョン番号を使用してください。

さて、私はあなたがしたのと同じことを経験していることに気づきました、そしてもう少し調査した後、私は問題が何であるかを見つけました!

ViewsフォルダーのデフォルトのMVC3 web.configを含める必要があります。MVC3には2つあります。1つはアプリケーションのルートに、もう1つはビューフォルダーにあります。これには、含まれる名前空間のセクションがあります。次のようになっていることを確認してください。

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

新しいMVC3プロジェクトを作成し、作成されたweb.configをビューフォルダーにコピーすることをお勧めします。

重要これを行ったら、ファイルを閉じて再度開く必要があります。出来上がり!Intellisense!


1
これを答えとしてマークすることはできませんが、これも私の問題でした。これらのセクションをweb.configに追加するのを忘れていました。
デイブ

ええ、あなたの答えを答えにしたいと思います。私はしばらくこれにこだわっていました(Razorへの変換の最初の試みが失敗した後、断念しました)。これはずっと問題でした。ありがとう!
ブライアンドナヒュー

3
私にはうまくいきません。または、少なくとも、Viewsフォルダーのweb.configにこれらすべてを設定していても、インテリセンスを取得する場合と取得しない場合があります。
Tom Lianza、2012年

どうもありがとうございました!それは私の日を安全にした!
セルゲイ

9
MAINweb.configファイルで最新バージョン(ここではMVC 5用)に更新してください<add key="webpages:Version" value="3.0.0.0" />
Simon_Weaver

30

ページを整理するための新しい領域を作成したときに、この同じ問題に遭遇しました。私の構造は次のようになりました:

WebProject

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

WebProjectの下のViewsフォルダーに作成されたビューは正常に機能しましたが、NewAreaの下に作成されたビューは次のエラーをスローしました。

名前「モデル」は現在のコンテキストに存在しません。

これを修正するには、WebProjectの下のViewsフォルダーにあるweb.configをNewAreaのViewsフォルダーにコピーしました。下記参照。

WebProject

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

追加->新しいフォルダーを使用してフォルダーを追加し、この新しい領域を手動で作成したので、これに遭遇しました。プロジェクトを右クリックして、[追加]-> [エリア]を選択する必要がありました。次に、Visual Studioが領域を正しく設定します。


2
+1 ...何らかの理由でweb.configが含まれていないことに気づきました。私の問題を解決するためのあなたの答えを見つけてうれしいです
pollirrata

2
これは古いことに気づきましたが、今日は同じ問題があったので、この回答に感謝したいと思いました。:)
Ricky Mutschlechner 2013

私にも同じ問題があり、同様の解決策がありました。私Views/Web.configSystem.Web.Mvc.MvcWebRazorHostFactoryバージョン5.0.0.0 を参照していましたが、v4.0を参照するサードパーティのAreaがあり、ビューが連携しています。私はViews/Web.configv4.0に戻し、すべてが機能しました。
ハンマー付きコード、2014

具体的には、web.configをViewsフォルダーからのもので上書きすることについてのあなたのコメントが、これを修正するのに役立ちました。内容をまったく同じにするだけでは、なんらかの理由で機能しません。AAARRRGGGHHH!;)
Ryan Vettese 2014

私の場合、robocopyを使用してローカルバージョンとサーバーバージョンを同期し、すべてのweb.configファイルを除外しました。サーバーバージョンにweb.configファイルがないと、このエラーが表示されます。
Wu

11

ビューがクラスライブラリアセンブリ内にある場合、これはプロジェクト間で共有ビューを再利用するのに役立ちます。Adamが提案することを実行するだけでは十分でない場合があります。それでもまだ問題がありました。

プロジェクトのルートにあるweb.configでこれを試してください:

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

そして、これはあなたのviewsフォルダのweb.configにあります:

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

これでうまくいきました。これで、複数のMVC Webサイトから参照できる非MVCプロジェクトのビューにインテリセンスとコンパイルエラーがありません。


1
これは、Webプロジェクトのweb.configファイル用ですか、それともクラスライブラリのweb.configファイル用ですか?
theJerm、2013年

7

ルートディレクトリにルート/ aboutのビューファイル(About.cshtml)のコピーを誤って持っていると、この問題に遭遇しました。(viewsフォルダーではありません)ファイルをルートから移動すると、問題は解消しました。


1
ありがとうございました!私はちょうど同じ問題で怒っていますが、これが答えでした;-)
Rob

涼しい!私も怒ったことを覚えています。:)
James Lawruk 2012

ルートディレクトリのフォルダーにいくつかの.cshtmlファイルがあり、ビューのフォルダーのみが失敗しました... while(true){bashHeadToWall; }。ありがとう。
matt.j.crawford 2016

7

VS2012とVS2013を使用して同様の問題がありました。
メインのweb.configの<appSettings>に次の行を追加すると機能しました。

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

行がすでにあるが2.0.0.0と言った場合、3.0.0.0に変更すると機能しました。


MVCアップグレードを実行した後も、それは私の問題でした。2.0.0.0は3に変更すると動作しました。
FerX32 2017年

6

更新:5/5/2015 MVC 5プロジェクトの場合、/ views / web.configでバージョンを5.0.0.0に設定する必要があります

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

1
問題の原因となっているバージョン5.2.0.0が見つかりましたが、5.0.0.0に変更すると修正されました!!! ありがとう。
vendettamit 2015

5

次のようなコードを使用して、ビューの上部でモデルを宣言します。

@model MyModel

たとえば、以下のように、それへの参照を大文字にする必要があります。

@Html.Encode(Model.MyDisplayValue)

私はこれの主な原因となり、フォルダビューで不足しているweb.configファイルを信じて、それが固定されており、まだ問題が持続、あなたが使用していることを確認した場合のモデルを、ないモデルソースでそれを参照します。


1
この解き問題は、あなたがラムダ式などに頼らない独自のヘルパーを作るときのように、あなたがビューに独自のコードでモデルを参照しようとしているということですエラー
JOHNC

3

私もこの問題に遭遇しました。私の状況は少し異なっていました。

  1. ビューフォルダの1つが誤ってプロジェクトのルートディレクトリに移動されました。これは、project_root/SignUp/ViewName以前のルートマッチングにつながり project_root/Views/SignUp/ViewNameます。これが@modelエラーの原因です。

  2. ビューを適切な場所に戻した後、ディレクトリはプロジェクトルートに何らかの方法で再作成されました。今回は空です。 /SignUp/ViewName動作しました/SignUp/が、403 - Forbidden: Access is denied.エラーが発生しました。全体のフォルダには、プロジェクトのルートから削除する必要があります。

これが誰かの役に立つことを願っています。私は問題がMVC 3からMVC 4への最近のアップグレードが原因であると信じて何時間も費やしまし た。アップグレード。


2

私はこの問題を解決するのに年齢を要しましたが、最後に私がMVCでそれを解決したことを願っています、それは同様です:

ASP.NET 4.5を再インストールしました(http://www.asp.net/downloads

http://www.asp.net/whitepapers/mvc4-release-notesのアップグレードチュートリアルに従いました

しかし、この言及された段落は私にとって間違っています

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

System.Web.Razorに Razorがあるのでにので、かみそりの名前空間をSystem.Web.Razorに変更しました。

これをweb.configに追加します

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

上記のすべてのアセンブリにアセンブリ参照を追加しました

ProjectTypeGuids要素を見つけて、{E53F8FEA-EAE0-44A6-8774-FFD645390401}を{E3E379DF-F4C6-4180-9B81-6769533ABE47}に置き換えます。

以上です。


1
webconfigにappsettingsを追加することで解決しました。私<add key="webpages:Version" value="2.0.0.0" />が原動力だと思いますが、他の設定は必要ありません。

1
MVC 5の場合、これは必要ですが3.0.0.0、はい、これは非常に重要です。
Simon_Weaver 2014年

2

それは恐ろしい間違いですが:

あなたが持っていることのWeb.configあなたのファイルを見るリモート。多分あなたはあなたのFtpプログラムのフィルターによってそれをアップロードすることをスキップしました。


2

Areas / MyArea / Views / web.configの下にweb.configがありませんでした。追加するとうまくいきました。これはMVC 5と.NET4.5でした


私のサイトも欠けていたので、このサイトの助けを借りて、再び動作させました。 forums.asp.net/t/...
Perposterer

0

別の理由もあります。私の場合、index.cshtmlファイルをリモートサーバーからのバックアップとして(Viewsフォルダーの外の)Webルートフォルダーにコピーしました。

したがって、私は/views/web.configを変更し続け、/ views / home / index.cshtmlを変更し続け、エラーが発生し続けました... viewsフォルダーの外の/index.cshtmlを見つけて削除し、それを確認するまですべてが正常に戻りました!


0

私はこれと同じ問題に遭遇しましたが、私の場合、変更されたのは、Visual Studio 2012をアンインストールしてVisual Studio 2013をインストールしたことだけです。ソリューションを開いたのですが、同じものを使い続けました The name 'model' does not exist in current context、すべてのRazorビューでエラーが発生し。

同僚はVS2013の更新を確認することを提案しました。VS2013 Update 1をインストールした後、このエラーが発生しなくなりました。


1
VS2013 Update 2でこのエラーが発生します。Update 1では、問題なく動作していました。まだ解決策を見つけることができません。Update 2をアンインストールしようとしましたが、cshtmlファイルを開いた後にVSがクラッシュしました。
iheartcsharp 2014年

VS2013 Update 2にも同じ問題があります
。– EricP

0

ビューディレクトリの設定ファイルを確認してください。MVC 4/5のキーを追加する


0

nugetを再インストールすることで解決しました

PM>インストールパッケージMicrosoft.AspNet.Razor-バージョン3.2.3


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>

0

パッケージを更新した後も同じ問題が発生します。私はあなたがこのトピックであなたが上に書いたすべてのことをしました、しかしモデルキーワードの基礎となる赤いものが消えていません。その後、解決策が見つかりました:プロジェクトのディレクトリから'package'フォルダーを削除して再構築しましたが、その間、NuGetは不足しているパッケージを復元できました。リフレッシュして完成です!



0

同じ問題に直面していて、解決策を見つけました。解決策は次のとおりです。

  1. Visual Studioを閉じる
  2. SUOファイルを削除する
  3. Visual Studioを再起動します。

.suoファイルは同じフォルダ内に隠しファイルであるの.svnソリューションファイルが存在しています。うまくいくと思います!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.