72

MVC4にアップグレード中です。http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806の指示に従いましたが、Razor ビューとレイアウトに次のようなエラーがあります。

  • 「System.Web.WebPages.Html.HtmlHelper」には「BeginRouteForm」の定義が含まれておらず、タイプ「System.Web.WebPages.Html.HtmlHelper」の最初の引数を受け入れる拡張メソッド「BeginRouteForm」が見つかりませんでした (あなたはusing ディレクティブまたはアセンブリ参照がありませんか?)

次のようなエラーもあります。

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

@Html にカーソルを合わせると、System.Web.Mvc.HtmlHelper ではなく System.Web.WebPages.Html.HtmlHelper 型であることがわかります

他にどのような情報が適切かはよくわかりませんが、これが私がいる場所です。

  • sln のクラス ライブラリなどを .net 4.5 にまだ更新していません。
  • プロジェクトは VS2010 で作成されましたが、VS2012 で移行を行っています。
  • プロジェクトが開き、VS2012、.Net 4.0、MVC 3 で正常に実行されます

任意のポインタをいただければ幸いです。

編集: web.config 内のすべての参照とファイルが次のようにアップグレードされました。

  • System.Web.Mvc、バージョン = 4.0.0.0
  • System.Web.WebPages、バージョン = 2.0.0.0
  • System.Web.Helpers、バージョン = 2.0.0.0
  • System.Web.WebPages.Razor、バージョン = 2.0.0.0

編集(2): 要素の /views/web.config (または、以下の @Paul のソリューションを試す場合は /views/shared/web.config ) には、System.Web から継承する独自の基本型があります。 Mvc.WebViewPage 、含まれているライブラリの参照が MVC4 に更新され、定義に移動すると MVC4 dll に移動します。

新しいリリースでは、この領域で何か変更がありましたか? リリースノートに関連するものは何も見当たりませんでした。

4

22 に答える 22

93

Web アプリケーションでこの問題に遭遇し.cshtmlましSystem.Web.WebPages.WebViewPageSystem.Web.Mvc.WebViewPage

まず、~/Views/web.config ファイルに正しいpageBaseType. 私の場合は に設定しましたSystem.Web.Mvc.WebViewPage

<configuration>
  <system.web.webPages.razor>
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <!-- ... -->
    </pages>
  </system.web.webPages.razor>
</configuration>

次に、重要なことに、上記がすでに優れている場合、これが重要であることに気付いた人もいます。

  1. ソリューションでクリーンを実行します
  2. 問題のあるプロジェクトをアンロードします
  3. .userプロジェクトの横に Visual Studio が生成したファイルを削除します。
  4. 問題を含むプロジェクトを再読み込みします
  5. ソリューションを構築する

VS2015の場合、.userおよびファイルは、ファイルの横に作成される隠しフォルダー.slnに移動されました。ただし、以下のコメントから、エラー メッセージは、ツールが間違ったバージョンの MVC を完全に使用していることを示唆しており、このフォルダーを削除しても問題は解決しません。私の知る限り、既知の解決策はありません。.vs.sln

于 2014-04-30T13:36:16.463 に答える
28

MVC 5 に更新するときに同じ問題が発生し、Views フォルダー内の web.config を更新することで解決しました。

<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.Optimization"/>
    <add namespace="System.Web.Routing" />
  </namespaces>
</pages>

ホスト -> factoryType は version:4.0.0.0 に設定されていました。

于 2014-02-02T19:31:01.663 に答える
9

ここですべての解決策を試しましたが、どれもうまくいきませんでした。繰り返しますが、私のサイトは正常に動作しますが、インテリセンスがなく、Visual Studio が認識しないビューの多くの下に赤い波線が表示されます。そのうちの 1 つは でHtml.BeginForm()あり、ViewBag.

私は新しい MVC 5 プロジェクトに取り組んでいます。web.config の行を何時間も比較した後、最終的にそれを修正したものを見つけました。

ルートの web.config には次の行がありました。

<system.web>
  <compilation debug="true" targetFramework="4.5" />

  <!-- ... -->
</system.web>

MVC 5 を使用していない以前のプロジェクトと比較し、次のような新しいプロジェクトから欠落していることに気付いたブロックをコピーしました。

<system.web>
  <compilation debug="true" targetFramework="4.5">
    <assemblies>
      <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </assemblies>
  </compilation>

  <!-- ... -->
</system.web>

上記のブロックをルートにある新しいプロジェクトの web.config にコピーし、プロジェクトの参照で見つかった各アセンブリの番号と一致するようにバージョンを変更しました (言及された各参照を右クリックし、[プロパティ] を選択すると、[バージョン] が表示されます選択した参照のプロパティ ウィンドウの下部にあります)。

上記を実装した後、私はインテリセンスを持ちHtml.BeginFormViewBag.Title、 などの下に未知の赤い線が表示されなくなりました。

于 2014-04-13T02:28:06.370 に答える
7

プロジェクトをクリーンに実行し、すべてをインストールまたは再インストールしましたが、サイトが正常にコンパイルおよび実行されていたにもかかわらず、まだ多くの Intellisense エラーが発生していました。Views フォルダーにある web.config ファイルのバージョン番号を変更すると、Intellisense がついに機能しました。私の場合、MVC 領域で実行される Orchard でモジュールをコーディングしていますが、これは MVC の最新リリースを使用しているすべての人に役立つと思います。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.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <pages pageBaseType="Orchard.Mvc.ViewEngines.Razor.WebViewPage">
          <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
            <add namespace="System.Linq" />
            <add namespace="System.Collections.Generic" />
          </namespaces>
        </pages>
      </system.web.webPages.razor>

      <system.web>

        <!--
            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.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
            pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
            userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
          <controls>
            <add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" 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>
于 2014-05-05T00:49:37.957 に答える
3

Visual Studio 2013から にアップグレードした後、この問題に対処していVisual Studio 2015ました。これおよび他の同様の SO 投稿にあるアドバイスのほとんどを試した後、最終的に問題を見つけました。修正の最初の部分は、すべてのものを最新バージョンに更新することでした(バグが発生している場合は、NuGetこれを行う必要があるかもしれません)。その後、必要に応じて、ビュー。これも:VS13Nuget Web.config

  1. MVCバージョンとその子ライブラリを新しいバージョンに修正します (展開してReferences右クリックしSytem.Web.MVCPropertiesバージョンを取得します)
  2. バージョンを修正しRazorます。

私は次のように見えました:

<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.2.3.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.Optimization"/>
        <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>
    <pages
      validateRequest="false"
      pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
      pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
      userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.2.3.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>
于 2015-08-18T04:19:41.433 に答える
2

プロジェクトを VS 2013 から VS 2015 に移行した後にこれに悩まされている方のために、https://visualstudiogallery.msdn.microsoft.com/c94a02e9-f2e9-から ASP.NET ツールの更新プログラムをインストールすることで、この問題を解決できました。 4bad-a952-a63a967e3935/file/77371/6/AspNet5.ENU.RC1_Update1.exe?SRC=VSIDE&UPDATE=TRUE .

于 2016-01-07T14:53:59.487 に答える
2

契約の世界では、古いイメージを使用しているマシンを使用することがよくあります。上記のすべてを試した後、VS 2013 を最新バージョン (Update 4) に更新することにしました。90 分後に再起動すると、参照が正常に機能するようになりました。お役に立てれば!

于 2015-04-28T16:44:56.080 に答える
1

Matt DeKrey の回答を拡張するために、csproj.user ファイルを削除するだけで (ソリューションを再作成する必要はありません)、問題を解決できました。

唯一の副作用は、開始アクションを特定のページを使用するようにリセットする必要があったことです。

于 2014-11-03T04:22:48.950 に答える
0

自分で問題を調べ始めたところですが、これが私の場合の様子です。Web 構成に正しい値がある場合は、MVC4 の単なるバグです。 http://connect.microsoft.com/VisualStudio/feedback/details/727729/viewbag-not-recognized-in-asp-net-mvc-4-project

于 2013-07-30T21:37:34.463 に答える
0

テーマのバリエーションとして、Views\Web.config が正しいことを何度も断言できたはずです。

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

しかし、実際には を参照する必要がありました。これは、しばらく前に公開されたセキュリティ アップデートのためではありVersion=4.0.0.1ません。Version=4.0.0.0

于 2015-10-02T20:23:53.390 に答える
0
*<system.web>
<compilation debug="true" targetFramework="4.5">
    <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </assemblies>
</compilation>*

この構成がありません。追加して、アセンブリの適切なバージョンを設定してください

于 2015-08-10T18:24:17.190 に答える