web-dev-qa-db-ja.com

名前 'ViewBag'は現在のコンテキストに存在しません

アプリケーションでViewBagを使用しようとしています。最新のdll、MVC 3の最新バージョンがすべてありますが、それでもエラーが発生します。

「名前 'ViewBag'は現在のコンテキストに存在しません」

MVC 3をアンインストールしてから再インストールしましたが、変更はありません。

また、dllがGACに表示されるとは思わない。

私の問題は何ですか?または、dllをGACに追加する方法は?

84
efleming

MVC固有のRazor構成をweb.configに追加する必要があります。こちらをご覧ください: Razor HtmlHelper Extensions(またはビューの他の名前空間)Not Found

MVC 3アップグレードツール を使用して、正しい設定値を自動的に確保します。

38
marcind

私は同じ問題を抱えていました。 ASP.NET MVCテンプレートを使用する代わりに空のASP.NETアプリケーションからプロジェクトを作成したため、./Views/Web.configファイルが欠落していました。

ASP.NET MVC 5の場合、Vanilla ./Views/Web.configファイルには次が含まれます。

<?xml version="1.0"?>

<!-- https://stackoverflow.com/a/19899269/178082 -->
<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>

    <system.web.webPages.razor>
        <Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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>

        <!--
                Enabling request validation in view pages would cause validation to occur
                after the input has already been processed by the controller. By default
                MVC performs request validation before a controller processes the input.
                To change this behavior apply the ValidateInputAttribute to a
                controller or action.
        -->
        <pages
                validateRequest="false"
                pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
                pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
                userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <controls>
                <add Assembly="System.Web.Mvc, Version=5.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>

このコンテンツを含む./Views/Web.configファイルを追加すると、この問題が修正されました。

77
crimbo

クリーニングして再構築してみてください。私の場合はうまくいきました。

19
Ruwan Jayalath

Visual Studio 2015でMVC 5にアップグレードされたソリューションでも同じ問題が発生しました。

(ルートweb.configではなく)Viewsフォルダー内のweb.configファイルで、<configSections>で参照されているバージョン番号を2.0.0.0から3.0.0.0に更新しました。

<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>
7
Jon Crowell

別のことを試してみたところ、VSキャッシュだったことがわかりました。次の場所にあるキャッシュファイルを削除することで解決できます。

C:\ Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache

プロジェクトを閉じ、そのパス上のファイルを削除してプロジェクトを再度開き、ソリューションをクリーンアップして再度ビルドし、問題を解決しました

次回Visual Studioを起動すると、ファイルが再作成されます

6

私は同じ問題を抱えていましたが、crimboは私に正しい手がかりを与えました。それは./Views/Web.configファイルが原因でしたが、これは私が推測する正しい名前空間を含んでいません...

空のMVC5プロジェクトを作成し、その./Views/Web.configを既存のプロジェクトにインポートすると、ViewBagを使用するたびに赤い波が消えます!

3
JJP

Visual Studio 2013を使用し、MVC 3を使用したい場合、Visual Studio 2013はMVC 3をネイティブにサポートしないため(./Views/web.configを変更しても)、MVC 4のみがこのエラーになります。 https ://msdn.Microsoft.com/en-us/library/hh266747.aspx

2

./Views/Web.Configファイルがありましたが、サイトの公開後にこのエラーが発生しました。ファイルのビルドアクションプロパティがNoneではなくContentに設定されていたことがわかります。これをContentに変更すると、公開が正常に機能するようになりました。

2
Kcoder

利用可能なすべての回答を試しても、回答が見つからない場合は、問題が解決する可能性があります。デバッグ、リリースなどのさまざまなソリューション構成がある場合は、プロジェクトの出力パスを「bin」に設定し、プロジェクトをコンパイルします。コンパイル後に変更を元に戻します。

Project Output Path

VSはbinフォルダでdllを探します

1
Naga Sailesh

私はすでにbinファイルとobjファイルを削除してVSを再起動しようとしましたが、運がありませんでした。

私もこの問題を何度も経験しており、毎回解決するのは苦痛です。多くの場合、web.configファイルにいずれかの参照の正しいバージョンがないことが原因です。これは、Visual Studioで参照をクリックしてプロパティタブでバージョンを確認し、web.configファイルのバージョンと一致させることを意味します。

もう1つの方法は、(可能であれば).netフレームワークの新しいバージョンにアップグレードし、bin/objファイルを削除してVisual Studioを再起動することです。私はそれが何かを変えていると仮定することができます

Csprojファイルの差分を簡単に確認しても、実際には大きな違いは表示されません...しかし、表示された違いは(古い行を表示するために(削除)を追加しました)

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003"> (remove)
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>(remove)
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>

Web.Configファイル(Viewのファイルではない)

<add key="webpages:Version" value="2.0.0.0" /> (remove)
<add key="webpages:Version" value="3.0.0.0"/>

また(同じweb.configファイルに)追加されましたが、手動で削除しました

 <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

最後に、パッケージマネージャーコンソールで、update-packageを追加します

Webサイトをローカルで実行し、2番目の段落(参照のバージョンと一致)で修正されたコンパイルエラーを確認します。

1
Dave

[プロパティ]ダイアログでアプリケーションのデフォルト名前空間を変更した後、この問題が発生しました。

./Views/Web.Configには古い名前空間への参照が含まれていました

1
csharpsql

私の場合、webpage:Versionを適切な値に変更することで問題が解決しました。正しい値は(3.0.0.0ではなく2.0.0.0)でした:

<appSettings>
        <add key="webpages:Version" value="2.0.0.0"/>
        <add key="webpages:Enabled" value="false"/>
1
Robin Leblond

すべてのアプローチを試した後、正しい構成しかなかったので、それらのどれも私にとってはうまくいきませんでした。最後に

システムから「temp」および「%temp%」からすべてのファイルを削除すると、この問題の解決に役立ちました。

実行コマンド(Windows + R)を開き、上記の文字列を入力して、すべての一時ファイルを削除します。

1
Champ

@Wilson Vallecillaが既に述べたように。キャッシュを削除するには、次の手順を実行してください。

以下のパスに従ってファイルを発見してください。

C:\Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache

4つのファイルすべてを削除:

  • Microsoft.VisualStudio.Default.cache
  • Microsoft.VisualStudio.Default.catalogs
  • Microsoft.VisualStudio.Default.err
  • Microsoft.VisualStudio.Default.external

プロジェクトを閉じ、そのパス上のファイルを削除してプロジェクトを再度開き、ソリューションをクリーンアップして再度ビルドし、問題を解決しました

一時ASP.NETファイルを削除することも役立ちます。 C:\ Users\your.name.here\AppData\Local\Temp\Temporary ASP.NET Files。

これは私のために動作します。

ありがとう!

0
Trilok Pathak

./Views/Web.Configフォルダーのwebpages:Versionを更新しましたが、この設定はルートのweb.configにも存在していました。両方を更新するか、ルートweb.configから削除します

0
user1412699