MVC 4アプリケーションで大幅なリファクタリングを行った後、Razorはビューのデバッグ中にこのエラーを表示します。
名前「モデル」は現在のコンテキストに存在しません。
これは問題のコード行です。
@model ICollection<DataSourceByActive>
の使い方@model
が正しいことを知っています。
なぜこうなった?どうすれば修正できますか?
MVC 4アプリケーションで大幅なリファクタリングを行った後、Razorはビューのデバッグ中にこのエラーを表示します。
名前「モデル」は現在のコンテキストに存在しません。
これは問題のコード行です。
@model ICollection<DataSourceByActive>
の使い方@model
が正しいことを知っています。
なぜこうなった?どうすれば修正できますか?
回答:
Viewsフォルダーにあるweb.configファイルをめちゃくちゃにしたと思います。
同じ.NETフレームワークをターゲットとする新しいプロジェクトを作成し、そのViews / web.configファイルを現在のプロジェクトのプロジェクトの上にコピーします。これで問題が解決します。
また、Dudeman3000がコメントしたように、MVCプロジェクトにエリアがある場合、それらにもすべてViews\web.config
ファイルがあります。
This will fix your problem.
それはしませんでした。
セクション内のサイトWeb.config
とビューの両方のディレクトリWeb.config
に以下があることを確認してくださいappSettings
<add key="webpages:Version" value="2.0.0.0" />
MVC5の場合:
<add key="webpages:Version" value="3.0.0.0" />
(そして、それはメインWeb.config
ファイルにのみ存在します。)
3.0.0.0
。(そして、それはメインの Web.configファイルにのみ存在します。)
2.0.0.0
ではなくバージョンを対象にしていることでした3.0.0.0
。問題を修正した変更。ありがとうございました!
これが私がしたことです:
.suoファイルは、.svnソリューションファイルと同じフォルダーにある隠しファイルで、Visual Studioのユーザーオプションが含まれています。
web.config
用のファイルはないASP.NET Core
ので、これでうまくいきました(インテリセンスを改善するための拡張機能も追加されました)。
.vs
フォルダーの削除が役立ちました。
同じ問題があり、新しいプロジェクトを作成して、Guptaの回答で推奨されているようにweb.configファイルをコピーしましたが、それでも問題は解決しませんでした。AlexとLiamの回答を確認したところ、この行は新しいweb.configからコピーされているはずだと思いましたが、新しいプロジェクト自体にはこの行がないようです(MVC5)。
<add key="webpages:Version" value="3.0.0.0" />
この行をviews / web.configファイルに追加すると、問題が解決しました。
ビューフォルダーのweb.configで次の行を変更すると、同じエラーが解決されました。
から
<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" />
System.Web.Mvc
アセンブリリファレンスをチェックして、必要なメジャーバージョンを確認します。
私の場合、私は最近、MVC 4からMVC 5に更新しました。この記事は非常に役立ちました。
一番下の行は、web.configとViews / web.configのすべてのバージョン番号参照をチェックして、それらがMVC 5に関連付けられたアップグレードされた正しいバージョンを参照していることを確認する必要があるということです。
解決策を見つけました。かみそりのバージョンまたはmvc 4を5に更新する場合は、いくつかの行を変更します。
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>
交換された
<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
変化もあるに違いない。
私の場合、次のコードが役立つことがわかりました。Viewsフォルダーの下のWeb.configファイルのコードの下に配置します。
<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>
コードが更新されたら、必ずソリューションをクリーンアップして再構築してください。これがお役に立てば幸いです。
既存の答えはどれもうまくいきませんでしたが、 うまくません.csproj
でしたが、さまざまなプロジェクトのファイルを比較することで、がうまく。次の.csproj
XMLファイルを手動で編集すると、Razor-intellisenseの問題が解決しました。これは、他のすべての答えを試しても役に立たない人を助けることができるでしょう。キーのすべてのインスタンスを削除することです<Private>False</Private>
中<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>
私はそれらがどのようにそこに到達したのか、または彼らが何をしているのか正確には知りません。おそらく私よりも賢い誰かがその情報を追加することができます。ようやくこの問題を解決できて嬉しかったです。
何らかの理由で、私のweb.config のoldVersion属性に0.0.0.0がありました。
<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>
1.0.0.0に変更することが解決策でした:
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
</dependentAssembly>
私の場合、問題は、プロジェクトをMVC 4からMVC 5にアップグレードした後、どういうわけか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">
それでも古い2.0.0.0バージョンがありました。バージョンを3.0.0.0に変更した後、すべてが正常に機能し始めました。
また、この問題のため、.cshtmlファイルを開くたびに、Visual Studio 2015 Community EditionはCPUをバッシングし始めます(アイドル時の使用率は30〜40%)。
Azure App Serviceにデプロイするときに同じ問題が発生しました
私の場合、それは〜/ Views / Web.configがプロジェクトに含まれていないためでした。
IIS Expressで動作しましたが、azureにデプロイしたときに同じエラーが発生しました。.csprojファイルに含まれていないため、展開されませんでした。
解決策は、プロジェクトに〜/ Views / Web.configが含まれていることを確認することでした。
ソリューションエクスプローラーに移動して[すべてのファイルを表示]アイコンをクリックすると、ビューを開くと、そこに含まれていないWeb.configファイルが表示されることがあります。
それを追加して、再公開し、ボブはあなたの叔父です。
これを解決するために、私はNuGetとパッケージマネージャーコンソールを使用して最新のMVCバージョンにアップグレードしたことを確認しました。
インストールパッケージMicrosoft.AspNet.Mvc-バージョン5.2.4
次に、最新のRazorバージョンにアップグレードしました
インストールパッケージMicrosoft.AspNet.Razor-バージョン3.2.4
次に、すべてのweb.configファイルを変更して、変更を反映させました。以下に示すように:
メインのweb.configファイルで、webpages:versionが正しいことを確認します。これは、それが見つかる場所です(他のキーは無視してください)。
<configuration>
<appSettings>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
</configuration>
次に、アセンブリにリストされている他のバージョンを探し、アセンブリのバージョンをプロジェクト参照にリストされているライブラリのバージョンと照合します!これらすべてが必要なわけではありません。
<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>
ランタイムassemblyBindingは「newversion」も表示する必要があります。NewVersion5.2.4.0がどこに表示されるかを確認してください。ただし、他のすべてのバージョンも確認してください。
<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>
次に、Views Web.Configセクションで、Razorが正しいバージョンであることを確認します。
<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>
そしてLastltには、Views Web.ConfigのPagesセクションがあります。
<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>
私のようにプロジェクトを変更せずにこの問題を解決する場合は、View Folderに配置されているweb.configを変更する必要があります。Enterで新しい行を書くか、空の行を削除します。次に、web.configを保存して再構築します。このソリューションで解決した私の問題
この問題が発生したとき、「Views」フォルダーの外にあるビューを追加しようとしました(コードを別の方法で整理するためだと思います)。(慣例により)ビュー内にビューを作成することで解決しました。
私の場合、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>
}
次の名前の変数をコードで使用する可能性があります model
。