MVC 4アプリケーションを大幅にリファクタリングした後、Razorがデバッグ中にこのエラーを表示します
'model'という名前は現在のコンテキストには存在しません。
これは問題のあるコード行です。
@model ICollection<DataSourceByActive>
@model
の使い方は正しいことを私は知っています。
なんでこんなことが起こっているの?どうすれば修正できますか?
Viewsフォルダにあるweb.configファイルをめちゃめちゃにしたと思います。
同じ.NETフレームワークをターゲットとする新しいプロジェクトを作成し、そのViews/web.configファイルを現在のプロジェクトのものの上にコピーします。これで問題は解決します。
また、Dudeman3000がコメントしたように、あなたのMVCプロジェクトにAreasがあれば、それらはすべてViews\web.config
ファイルも持っています。
あなたのサイトのweb.configとappSettings
セクションのviewsディレクトリweb.config
の両方に以下があることを確認してください。
<add key="webpages:Version" value="2.0.0.0" />
MVC5の場合:
<add key="webpages:Version" value="3.0.0.0" />
(そしてそれはメインのWeb.configファイルにのみ存在します。)
これが私がしたことです:
.suoファイルは、.svnソリューションファイルと同じフォルダにある隠しファイルで、Visual Studioのユーザーオプションが含まれています。
私は同じ問題を抱えていました、私は新しいプロジェクトを作成し、Guptaによる答えで推奨されているようにweb.configファイルをコピーしました、しかしそれは私のために問題を解決しませんでした。私はこの行は新しい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" />
私の場合、私は最近MVC 4からMVC 5にアップデートしました。これはweb.configをかなりひどく壊します。この記事は非常に役に立ちました。
肝心なのは、あなたが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
も変更する必要があります。
@modelから@Modelに変更することは私にとっての仕事でした。
@modelはView Modelオブジェクトタイプを表します。 @ModelはView Modelオブジェクトを表します。
私の場合は、次のコードが役に立ちます。 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.を持っていました:
<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.に変更することです。
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
</dependentAssembly>
Azure App Serviceにデプロイするときに同じ問題が発生しました
私の場合は、〜/ Views/Web.configがプロジェクトに含まれていなかったためです。
これはIIS Expressで機能しましたが、Azureにデプロイしたときに同じエラーが発生しました。 .csprojファイルに含まれていなかったため、デプロイされませんでした。
解決策は〜/ Views/Web.configがプロジェクトに含まれるようにすることでした。
ソリューションエクスプローラーに移動して[すべてのファイルを表示]アイコンをクリックしてからビューを開くと、そこに含まれていないWeb.configファイルが表示されることがあります。
それを追加し、再公開し、そしてボブがあなたのおじです。
私にとっては、この問題は私が最近インポートしたライブラリの1つに矛盾する.NETバージョンがありました。私がインポートしたライブラリは4.5.2用にコンパイルされ、ASP.NET MVCサイトはそれをターゲット4.5にインポートしました。 libを4.5用に再コンパイルした後、Webサイトは適合するでしょう。
また、コンパイルエラーはありませんでしたが、問題は「警告」として報告されていました。警告がある場合は、必ず読んでください。
私の場合、問題は、プロジェクトを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に変更した後、すべてが正しく動作し始めました。
また、この問題のため、Visual Studio 2015 Community Editionでは、.cshtmlファイルを開くたびにCPUの使用率が上がり始めます(アイドル時の使用率が30〜40%)。
私のようにプロジェクトに何も変更を加えずにこの問題を解決した場合は、View Folderに配置したweb.configを変更する必要があります。空行を入力または削除して、新しい行を書くだけです。それからweb.configを保存して再構築します。私の問題はこの解決策で解決しました
この問題が発生したとき、私は自分の "Views"フォルダの外側にあるビューを追加しようとしていました(コードを別様に整理するために)。 (慣例に従って)ビューの中にビューを作成することで解決しました。
これを解決するために、NuGetとPackage Managerコンソールを使って最新のMVCバージョンにアップグレードしたことを確認しました。
インストールパッケージMicrosoft.AspNet.Mvc -Version 5.2.4
その後、最新のRazorバージョンにアップグレードします。
インストールパッケージMicrosoft.AspNet.Razor -Version 3.2.4
それから私はすべてのweb.configファイルを変更を反映するように変更しました。あなたが以下に見るように:
メインのweb.configファイルで、webpages:のバージョンが正しいことを確認します。これが見つかる場所です(他のキーは無視してください)。
<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"を表示するはずです、それがNewVersion 5.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>
そして最後に、Views Webの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>
私の場合は、誤って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>
}