Razor Viewが「名前「モデル」は現在のコンテキストに存在しません」をスローします


201

MVC 4アプリケーションで大幅なリファクタリングを行った後、Razorはビューのデバッグ中にこのエラーを表示します。

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

これは問題のコード行です。

@model ICollection<DataSourceByActive>

の使い方@modelが正しいことを知っています。

なぜこうなった?どうすれば修正できますか?


キーは「現在のコンテキストで」です。どこかでブラケットが開かれなかったか、閉じられなかった...だからあなたの発言は、あなたが思っている文脈ではない。
Floris 2013年

1
コントローラコードを、実行しようとしていることのサンプルマークアップと共に追加できますか?
scniro 2013年

回答:


245

Viewsフォルダーにあるweb.configファイルをめちゃくちゃにしたと思います。

同じ.NETフレームワークをターゲットとする新しいプロジェクトを作成し、そのViews / web.configファイルを現在のプロジェクトのプロジェクトの上にコピーします。これで問題が解決します。

また、Dudeman3000がコメントしたように、MVCプロジェクトにエリアがある場合、それらにもすべてViews\web.configファイルがあります。


20
MVCプロジェクトにエリアがある場合、それらすべてにもViews \ web.configファイルがあることに注意してください。
Dudeman3000 14

6
奇妙なことに、viewsディレクトリの私のweb.configは問題ありませんでしたが、プロジェクトのweb.configのWebページのバージョンは2.0.0でした。誤ったエラー検出は3.0.0にしたときになくなりました。
ウィリアムT.マラード2016

43
This will fix your problem.それはしませんでした。
Timwi 2017

2
@AnirudhaGupta問題の1つ。
Timwi 2017

1
有効なweb.configファイルをViewsフォルダーにコピーしましたが、プロジェクトに含まれていません。
ワイルドキャットマット

104

セクション内のサイト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ファイルにのみ存在します。)


14
ありがとう!MVC5の場合、バージョン番号はである必要があります3.0.0.0。(そして、それはメインの Web.configファイルにのみ存在します。)
xec

私がどこでもバージョンを変更しようとしたときに正しい答えです。最後に、これがかみそり知能の動作を妨げていた唯一の問題でした。
Shivam Chopra

6
これでうまくいきました。すべてを機能させるには、この変更後にVisual Studioを再起動する必要がありました。
Ravvy 2016年

1
私はMVC 5でこの問題を抱えていました。問題は、キーが存在していたが、2.0.0.0ではなくバージョンを対象にしていることでした3.0.0.0。問題を修正した変更。ありがとうございました!
vaindil 2016年

これを使用して機能しましたが、web.configビューにのみ追加しました。Intellisenseは、VSの再起動直後に起動しました。
Matt

48

これが私がしたことです:

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

.suoファイルは、.svnソリューションファイルと同じフォルダーにある隠しファイルで、Visual Studioのユーザーオプションが含まれています。


ええ、アプリweb.config用のファイルはないASP.NET Coreので、これでうまくいきました(インテリセンスを改善するための拡張機能も追加されました)。
VMAtm 2017

2
SUOファイルを削除する必要もありませんでした。Visual Studioを閉じて開きました。
ジムS

Visual Studio 2019:suoファイルなし、.vsフォルダーの削除が役立ちました。
ステパンHavránek

ありがとう..これは私のためにそれをしました。.net Core 2.0 mvcアプリ
問題は

2
Visual Studio 2019をここで閉じて、もう一度開くと修正されます。ありがとう。
JordanGW

26

同じ問題があり、新しいプロジェクトを作成して、Guptaの回答で推奨されているようにweb.configファイルをコピーしましたが、それでも問題は解決しませんでした。AlexとLiamの回答を確認したところ、この行は新しいweb.configからコピーされているはずだと思いましたが、新しいプロジェクト自体にはこの行がないようです(MVC5)。

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

この行をviews / web.configファイルに追加すると、問題が解決しました。


これは、asp.netバージョン4.0.0から4.5.1にアップグレードした場合に発生します。私の場合、メインのweb.configにwebpages:Version = 2.0.0.0が表示されていましたが、3.0.0.0である必要があります。この値を更新すると、問題が修正されました。
Veysel Ozdemir 2015

15

ビューフォルダーの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" />

1
これも私にとってはうまくいきました。C#6をサポートするためにかみそりをアップグレードしました。MVCも更新されている必要があります。System.Web.Mvcアセンブリリファレンスをチェックして、必要なメジャーバージョンを確認します。
James Wilkins

私も同じ問題を抱えていました。x.0.0.0にweb.configファイル内のすべてのMVC、カミソリなどのアセンブリを固定して、再び私のために働いものだ
mamashare

@JamesWilkinsニース、私のために働きました。1つだけ、プロジェクトの.suoファイルを削除してからVSを再起動します。

良いキャッチ!.netフレームワーク4.0から4.6にアップグレードし、明らかに間違ったアセンブリバージョンを指していると、この問題に直面していました。
2018

10

私の場合、私は最近、MVC 4からMVC 5に更新しました。この記事は非常に役立ちました。

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web- api-2

一番下の行は、web.configとViews / web.configのすべてのバージョン番号参照をチェックして、それらがMVC 5に関連付けられたアップグレードされた正しいバージョンを参照していることを確認する必要があるということです。


1
MVC 4からMVC 5にアップグレードした場合、これがチェックする答えです。バージョンの問題を正確に特定し、私の問題を解決し、何かを壊すリスクはほとんどありません。
R. Schreurs

10

@modelから@Modelに変更すると、うまくいきました。

@modelは、View Modelオブジェクトタイプを表します。@ModelはView Modelオブジェクトを表します。


1
これを忘れないようにしたい!思い出させてくれてありがとう!
マイク

1
この問題を調べる必要がある回数はイライラします。しかし、簡単な修正でよかったです。
ブレンダンスルーク

7

解決策を見つけました。かみそりのバージョンまたは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 変化もあるに違いない。


6

私の場合、次のコードが役立つことがわかりました。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>

コードが更新されたら、必ずソリューションをクリーンアップして再構築してください。これがお役に立てば幸いです。


5

既存の答えはどれもうまくいきませんでしたが、 うまくません.csprojでしたが、さまざまなプロジェクトのファイルを比較することで、がうまく。次の.csprojXMLファイルを手動で編集すると、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>

私はそれらがどのようにそこに到達したのか、または彼らが何をしているのか正確には知りません。おそらく私よりも賢い誰かがその情報を追加することができます。ようやくこの問題を解決できて嬉しかったです。


提案のおかげで、これは私にとっても何らかの理由で
うまくいきました

私も働いた。
Alex

それが私の場合に機能した唯一のオプションでした。vs2010プロジェクトを2019に切り替えて、魅力的な仕事をしました。csprojを保存した後、元のファイルと同様にタグのコメントを外そうとしましたが、まだ機能しています...
jefissu

3

何らかの理由で、私の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>

3

私はVisual Studio 2019でMVC4プロジェクトを使用していました-VS 2019はそのままではMVC 4をサポートしていません。これをインストールする必要があります。

手順:

  • Visual Studioインストーラーを開く(WindowsでVisual Studioインストーラーを検索)
  • 個々のコンポーネントをクリックします
  • 検索ボックスに「mvc」と入力します
  • mvc4-boxを確認する
  • 右下の「変更」をクリックします

注:Visual Studioを閉じるために必要です

ここに画像の説明を入力してください


2

私の場合、問題は、プロジェクトを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%)。


2

Azure App Serviceにデプロイするときに同じ問題が発生しました

私の場合、それは〜/ Views / Web.configがプロジェクトに含まれていないためでした。

IIS Expressで動作しましたが、azureにデプロイしたときに同じエラーが発生しました。.csprojファイルに含まれていないため、展開されませんでした。

解決策は、プロジェクトに〜/ Views / Web.configが含まれていることを確認することでした。

ソリューションエクスプローラーに移動して[すべてのファイルを表示]アイコンをクリックすると、ビューを開くと、そこに含まれていないWeb.configファイルが表示されることがあります。

それを追加して、再公開し、ボブはあなたの叔父です。


1

私にとって、問題は最近インポートしたライブラリの1つで競合する.NETバージョンでした。インポートしたライブラリは4.5.2用にコンパイルされており、ターゲットの4.5にインポートしたASP.NET MVCサイトです。上記のlibを4.5用に再コンパイルすると、Webサイトがコンパイルされます。

また、コンパイルエラーはありませんでしたが、問題は「警告」として報告されていました。したがって、警告がある場合は必ずすべてお読みください。


1

これを解決するために、私は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>

1

私のようにプロジェクトを変更せずにこの問題を解決する場合は、View Folderに配置されているweb.configを変更する必要があります。Enterで新しい行を書くか、空の行を削除します。次に、web.configを保存して再構築します。このソリューションで解決した私の問題


0

この問題が発生したとき、「Views」フォルダーの外にあるビューを追加しようとしました(コードを別の方法で整理するためだと思います)。(慣例により)ビュー内にビューを作成することで解決しました。


0

私の場合、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>
    }

これは重要; あなたが反対票を投じられた理由がわからない。
FlyingV

1
元の質問とは関係がないからです。
Ryan


-3

変数を出力するとき@Modelだけではなく、を使用して問題を解決しましたmodel


-8

次の名前の変数をコードで使用する可能性があります model

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