93

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

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

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

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

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

4

16 に答える 16

85

私も同じ問題を抱えていました。./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この問題が修正されました。

于 2013-11-11T05:12:19.790 に答える
39

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

MVC 3アップグレードツールを使用して、正しい構成値があることを自動的に確認します。

于 2011-02-10T17:19:52.533 に答える
19

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

于 2013-03-18T04:06:03.940 に答える
9

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

ビューフォルダー内の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>
于 2015-08-31T14:56:23.683 に答える
6

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

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

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

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

于 2016-02-11T08:59:22.963 に答える
3

私は同じ問題を抱えていて、crimboは私に正しい手がかりを与えました、それは存在したが私が推測する正しい名前空間を含んでいない./Views/Web.configファイルによって引き起こされました...

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

于 2013-12-18T08:59:17.327 に答える
2

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

于 2015-01-26T17:38:56.747 に答える
2

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

于 2015-02-24T20:05:07.627 に答える
1

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

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

于 2015-12-11T10:09:42.273 に答える
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"/>
于 2016-03-21T20:31:36.573 に答える
1

すべてのアプローチを試した後、私が持っているのは正しい構成だけだったので、どれもうまくいきませんでした。ついに

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

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

于 2016-07-19T18:47:43.067 に答える
1

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

プロジェクトの出力パス

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

于 2016-10-27T08:44:34.487 に答える
1

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

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

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

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

于 2017-11-08T07:44:17.147 に答える
0

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

于 2016-09-06T10:00:25.653 に答える
0

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

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

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 \TemporaryASP.NETファイル。

これは私のために働きます。

ありがとう!

于 2019-02-12T10:41:47.237 に答える
0

MVC5の場合、アプリケーションを最初から作成する場合。Web.configファイルをViewsフォルダーに追加し、次のコードを貼り付ける必要があります。

<?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ページを再度閉じて開く必要がある場合があります。

于 2019-09-05T11:56:38.460 に答える