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