web-dev-qa-db-ja.com

かみそりビューは、「名前 'モデル'は現在のコンテキストに存在しません」を投げます

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

'model'という名前は現在のコンテキストには存在しません。

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

@model ICollection<DataSourceByActive>

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

なんでこんなことが起こっているの?どうすれば修正できますか?

162
Kehlan Krumme

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

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

また、Dudeman3000がコメントしたように、あなたのMVCプロジェクトにAreasがあれば、それらはすべてViews\web.configファイルも持っています。

220
Anirudha Gupta

あなたのサイトの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ファイルにのみ存在します。)

87
Alex

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

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

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

39

私は同じ問題を抱えていました、私は新しいプロジェクトを作成し、Guptaによる答えで推奨されているようにweb.configファイルをコピーしました、しかしそれは私のために問題を解決しませんでした。私はこの行は新しいweb.configからコピーされたに違いないと考えましたが、新しいプロジェクト自体にはこの行がありませんでした(MVC5)。

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

Views/web.configファイルにその行を追加することで問題は解決しました。

24
Tarek Shawadfy

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

私の場合、私は最近MVC 4からMVC 5にアップデートしました。これはweb.configをかなりひどく壊します。この記事は非常に役に立ちました。

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に関連した正しいアップグレードバージョンを参照していることを確認する必要があるということです。

10
Justin Skiles

解決策を見つけました。かみそりのバージョンまたは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
ddagsan

@modelから@Modelに変更することは私にとっての仕事でした。

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

6
eaglei22

私の場合は、次のコードが役に立ちます。 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
Prach

既存の答えのどれも私のために働きませんでした、しかし私はした異なるプロジェクトの.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>

私はそれらがどうやってそこに着いたのか、まさに彼らが何をしているのかわかりません、多分私より賢い人がその情報を追加することができます。私はようやくこの問題を解決できてうれしかったです。

4
funkwurm

どういうわけか私の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>
2
chemark

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

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

これはIIS Expressで機能しましたが、Azureにデプロイしたときに同じエラーが発生しました。 .csprojファイルに含まれていなかったため、デプロイされませんでした。

解決策は〜/ Views/Web.configがプロジェクトに含まれるようにすることでした。

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

それを追加し、再公開し、そしてボブがあなたのおじです。

1
gburton

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

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

1
Big Gunz

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

1

私のようにプロジェクトに何も変更を加えずにこの問題を解決した場合は、View Folderに配置したweb.configを変更する必要があります。空行を入力または削除して、新しい行を書くだけです。それからweb.configを保存して再構築します。私の問題はこの解決策で解決しました

0

この問題が発生したとき、私は自分の "Views"フォルダの外側にあるビューを追加しようとしていました(コードを別様に整理するために)。 (慣例に従って)ビューの中にビューを作成することで解決しました。

0

これを解決するために、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>
0
Keith Aymar

私の場合は、誤ってweb.configファイルをViewsフォルダから削除しました。再度追加しましたが、問題ありませんでした。

0
Reza

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