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


89

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

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

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

また、dllがGACに表示されているとは思いません。

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


1
5.2.2.0の場合、web.configは5.2.2.0を指す必要がありますが、MVCアセンブリの場合、Views / web.configは5.1.0.0を指します
Bart Calixto

回答:


39

MVC固有のRazor構成をweb.configに追加する必要があります。ここを参照してください:Razor HtmlHelper Extensions(またはビューの他の名前空間)が見つかりません

MVC 3アップグレードツールを使用して、適切な構成値を自動的に取得します。


ありがとう!そのリンクは役に立ちました!これはすべてMVC 3ベータ版のサイトを作成した結果だと思います。最新バージョンを取得しても、Web設定は変更されません。ありがとう!
2011

私はこれだけでなく、関連の修正と私のポストを更新しました:stevesmithblog.com/blog/...を
ssmith

アップグレードツール(更新された回答を参照)を使用して、構成が正しいことを確認できます。
marcid

3
注:ビューの場所が他にある場合、つまり通常の~/Views場所の外にある場合は~/Views/Web.config、その場所にもコピーします。
dave thieben 2013年

83

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

ASP.NET MVC 5の場合、バニラ./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このコンテンツを含むファイルを追加すると、この問題が解決しました。


3
ついに解決。/Views/Web.configファイルをサーバーにデプロイしなかったため、欠落しているファイルがエラーの原因でした。
Stack Man

2
戻ってきて、このソリューションを2回使用しました!:)
user230910

2
それを理解しようと一日を費やした後、これは私のためにそれをしました。ありがとう。"./Views/Web.configの<namespaces>タグに追加する必要があるのは、 <add namespace="System.Web.Optimization"/>
dunwan

私の場合、何らかの理由で要素がルートweb.configになかったが、MVC5レイアウトを作成したときに「ビュー」の下のweb.configに追加されました。要素をルートweb.configに移行し、「追加」(??)web.configを削除しました
JDPeckham

2
おい、神はこれのためにあなたを祝福します。私はこれに非常に悩まされました。
Dragan B.

19

クリーンアップして再構築してください。私の場合はうまくいきました。


私のコードの何が問題だったのかと思って時間を無駄にしたとは信じられません...
うまくいき

この作品は...私は常にこの操作を行うと、そんなに時間を無駄にすることを忘れていること腹立たしい...必要はありません
TCC

私の場合、ソリューションからパッケージフォルダを削除してクリーンアップする必要がありました
Nerdroid

9

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

Viewsフォルダー内のweb.configファイル(ルート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>

2
どうもありがとうございました!このバージョンのものはクレイジーです。私がMSのアップグレードを好転させるたびに、お互いにやりくりしています。Ling to SQLはEntity Frameworkに置き換えられ、MVCは1から6に何度も移行しています。
JustJohn

ありがとう、VS2017の問題を修正しました。
QuickNull 2017

VS 2019 mvc 5アプリを修正しました。
MrDywar、

6

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

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

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

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


これは、v15(VS 2017)でも機能しました。ウィルソン&シルバー、時間を大幅に節約してくれてありがとう。
ポールシュローダー

ユニバーサルパス%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
フィアット2018年

3

私は同じ問題を抱えていて、クリンボが正しい手がかりを与えました、それは./Views/Web.configファイルが原因で発生しましたが、正しい名前空間が含まれていないと思います...

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


Visual Studio 2013では、MVCボックスがチェックされた空のWebプロジェクトが作成されました。最小限のMVC名前空間参照ですべてのファイル構造を作成します。シンプルなコントローラーとビューを追加しました。「タイプまたは名前空間名「Ajax」は名前空間「System.Web.Mvc」に存在しません(アセンブリ参照がありません)」というコンパイルエラーが発生しました。ファイルエディターは、「名前 'ViewBag'は現在のコンテキストに存在しません」という警告も表示します。プロジェクト参照に移動し、System.Web.Mvcを見つけて、ローカルコピーをtrueに設定します。ビルドをクリーンアップして再ビルドすると、問題が解決しました。
Kagan Agun


2

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


1

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

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


はい、完全に間違った場所にエラーメッセージが表示されます。すべてのweb.configファイルで参照されているすべての名前空間が存在するかどうかを確認する価値があります-Areaのweb / configファイルに古い名前空間があり、多くの問題が発生しています
user230910

1

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

すべてのアプローチを試した後、私が持っているすべてが正しい構成であったため、それらのどれも私のために機能しませんでした。最後に

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

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


ありがとうございました!すべてを試した後、これは私のために働いた。
user390480 2017

1

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

プロジェクト出力パス

VSはbinフォルダーでdllを検索します


1

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

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

別の方法は、(可能な場合).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ファイル内(ビュー内のものではありません)

<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番目の段落で修正されたコンパイルエラーを確認します(参照のバージョンを一致させます)。


0

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


0

@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

MVC5の場合、アプリケーションをゼロから構築する場合。Viewsフォルダーにweb.configファイルを追加し、その中に次のコードを貼り付ける必要があります。

<?xml version="1.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>

  <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>
</configuration>

MVC 3の場合、バージョンを3.0.0.0に変更する必要があることに注意してください。

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

変更を確認するには、*。cshtmlページを閉じて再度開く必要がある場合があります。

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