プロジェクトにcshtmlページを追加しました。次の宣言を追加しようとすると、「名前「モデル」は現在のコンテキストに存在しません」というエラーが表示されます。
@model xyz.abc.SomeClass
参照を確認しましたが、すべて揃っています。ビューフォルダーにweb.configを追加しましたが、修正されませんでした。
何か足りないものはありますか?
プロジェクトにcshtmlページを追加しました。次の宣言を追加しようとすると、「名前「モデル」は現在のコンテキストに存在しません」というエラーが表示されます。
@model xyz.abc.SomeClass
参照を確認しましたが、すべて揃っています。ビューフォルダーにweb.configを追加しましたが、修正されませんでした。
何か足りないものはありますか?
回答:
更新: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!
MAIN
web.configファイルで最新バージョン(ここではMVC 5用)に更新してください<add key="webpages:Version" value="3.0.0.0" />
ページを整理するための新しい領域を作成したときに、この同じ問題に遭遇しました。私の構造は次のようになりました:
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が領域を正しく設定します。
Views/Web.config
はSystem.Web.Mvc.MvcWebRazorHostFactory
バージョン5.0.0.0 を参照していましたが、v4.0を参照するサードパーティのAreaがあり、ビューが連携しています。私はViews/Web.config
v4.0に戻し、すべてが機能しました。
ビューがクラスライブラリアセンブリ内にある場合、これはプロジェクト間で共有ビューを再利用するのに役立ちます。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プロジェクトのビューにインテリセンスとコンパイルエラーがありません。
ルートディレクトリにルート/ aboutのビューファイル(About.cshtml)のコピーを誤って持っていると、この問題に遭遇しました。(viewsフォルダーではありません)ファイルをルートから移動すると、問題は解消しました。
VS2012とVS2013を使用して同様の問題がありました。
メインのweb.configの<appSettings>に次の行を追加すると機能しました。
<add key="webpages:Version" value="3.0.0.0" />
行がすでにあるが2.0.0.0と言った場合、3.0.0.0に変更すると機能しました。
更新: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>
次のようなコードを使用して、ビューの上部でモデルを宣言します。
@model MyModel
たとえば、以下のように、それへの参照を大文字にする必要があります。
@Html.Encode(Model.MyDisplayValue)
私はこれの主な原因となり、フォルダビューで不足しているweb.configファイルを信じて、それが固定されており、まだ問題が持続、あなたが使用していることを確認した場合のモデルを、ないモデルソースでそれを参照します。
私もこの問題に遭遇しました。私の状況は少し異なっていました。
ビューフォルダの1つが誤ってプロジェクトのルートディレクトリに移動されました。これは、project_root/SignUp/ViewName
以前のルートマッチングにつながり
project_root/Views/SignUp/ViewName
ます。これが@model
エラーの原因です。
ビューを適切な場所に戻した後、ディレクトリはプロジェクトルートに何らかの方法で再作成されました。今回は空です。 /SignUp/ViewName
動作しました/SignUp/
が、403 - Forbidden: Access is denied.
エラーが発生しました。全体のフォルダには、プロジェクトのルートから削除する必要があります。
これが誰かの役に立つことを願っています。私は問題がMVC 3からMVC 4への最近のアップグレードが原因であると信じて何時間も費やしまし た。アップグレード。
私はこの問題を解決するのに年齢を要しましたが、最後に私が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}に置き換えます。
以上です。
<add key="webpages:Version" value="2.0.0.0" />
が原動力だと思いますが、他の設定は必要ありません。
3.0.0.0
、はい、これは非常に重要です。
それは恐ろしい間違いですが:
あなたが持っていることのWeb.configあなたのファイルを見るにリモート。多分あなたはあなたのFtpプログラムのフィルターによってそれをアップロードすることをスキップしました。
Areas / MyArea / Views / web.configの下にweb.configがありませんでした。追加するとうまくいきました。これはMVC 5と.NET4.5でした
私はこれと同じ問題に遭遇しましたが、私の場合、変更されたのは、Visual Studio 2012をアンインストールしてVisual Studio 2013をインストールしたことだけです。ソリューションを開いたのですが、同じものを使い続けました The name 'model' does not exist in current context
、すべてのRazorビューでエラーが発生し。
同僚はVS2013の更新を確認することを提案しました。VS2013 Update 1をインストールした後、このエラーが発生しなくなりました。
nugetを再インストールすることで解決しました
PM>インストールパッケージMicrosoft.AspNet.Razor-バージョン3.2.3
私にとってこれは問題でした。このブロック全体がセクションにありませんでした。
<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>
web.configファイルが公開ファイルに存在することを確認してください