アプリケーションでViewBagを使用しようとしています。最新のdll、MVC 3の最新バージョンがすべてありますが、それでもエラーが発生します。
「名前 'ViewBag'は現在のコンテキストに存在しません」
MVC 3をアンインストールしてから再インストールしましたが、変更はありません。
また、dllがGACに表示されるとは思わない。
私の問題は何ですか?または、dllをGACに追加する方法は?
MVC固有のRazor構成をweb.configに追加する必要があります。こちらをご覧ください: Razor HtmlHelper Extensions(またはビューの他の名前空間)Not Found
MVC 3アップグレードツール を使用して、正しい設定値を自動的に確保します。
私は同じ問題を抱えていました。 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
ファイルを追加すると、この問題が修正されました。
クリーニングして再構築してみてください。私の場合はうまくいきました。
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>
別のことを試してみたところ、VSキャッシュだったことがわかりました。次の場所にあるキャッシュファイルを削除することで解決できます。
C:\ Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
プロジェクトを閉じ、そのパス上のファイルを削除してプロジェクトを再度開き、ソリューションをクリーンアップして再度ビルドし、問題を解決しました
次回Visual Studioを起動すると、ファイルが再作成されます
私は同じ問題を抱えていましたが、crimboは私に正しい手がかりを与えました。それは./Views/Web.configファイルが原因でしたが、これは私が推測する正しい名前空間を含んでいません...
空のMVC5プロジェクトを作成し、その./Views/Web.configを既存のプロジェクトにインポートすると、ViewBagを使用するたびに赤い波が消えます!
Visual Studio 2013を使用し、MVC 3を使用したい場合、Visual Studio 2013はMVC 3をネイティブにサポートしないため(./Views/web.configを変更しても)、MVC 4のみがこのエラーになります。 https ://msdn.Microsoft.com/en-us/library/hh266747.aspx
./Views/Web.Config
ファイルがありましたが、サイトの公開後にこのエラーが発生しました。ファイルのビルドアクションプロパティがNone
ではなくContent
に設定されていたことがわかります。これをContent
に変更すると、公開が正常に機能するようになりました。
私はすでに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=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
最後に、パッケージマネージャーコンソールで、update-package
を追加します
Webサイトをローカルで実行し、2番目の段落(参照のバージョンと一致)で修正されたコンパイルエラーを確認します。
[プロパティ]ダイアログでアプリケーションのデフォルト名前空間を変更した後、この問題が発生しました。
./Views/Web.Configには古い名前空間への参照が含まれていました
私の場合、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"/>
すべてのアプローチを試した後、正しい構成しかなかったので、それらのどれも私にとってはうまくいきませんでした。最後に
システムから「temp」および「%temp%」からすべてのファイルを削除すると、この問題の解決に役立ちました。
実行コマンド(Windows + R)を開き、上記の文字列を入力して、すべての一時ファイルを削除します。
@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。
これは私のために動作します。
ありがとう!
./Views/Web.Configフォルダーのwebpages:Versionを更新しましたが、この設定はルートのweb.configにも存在していました。両方を更新するか、ルートweb.configから削除します