私はMVC4にアップグレード中です。 http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806 の指示に従いましたが、Razorのビューとレイアウトには次のようなエラーがあります
次のようなエラーもあります:
@Htmlにカーソルを合わせると、System.Web.Mvc.HtmlHelperではなくSystem.Web.WebPages.Html.HtmlHelper型であることがわかります。
他のどの情報が適切であるかは確かではありませんが、これは私がいる場所です:
任意のポインタを高く評価しました。
編集:web.config内のすべての参照とファイルが次のようにアップグレードされました:
Edit(2):/views/web.config(または@Paulのソリューションを試してみると/views/shared/web.config )要素には、System.Web.Mvc.WebViewPageを継承する独自のベースタイプがあり、含まれるライブラリの参照がMVC4に更新され、定義に移動するとMVC4 dllに移動します。
新しいリリースのこの領域で何か変更はありますか?リリースノートに関連するものは見当たらない。
Webアプリケーションでこの問題に遭遇しました-.cshtml
が必要なときに、System.Web.WebPages.WebViewPage
ファイルがSystem.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>
次に、重要、上記がすでに適切である場合、これが重要であると感じる人がいます:
.user
ファイルを削除します。VS2015の場合、.user
および.sln
ファイルは、.vs
ファイルの隣に作成される.sln
隠しフォルダーに移動しました。ただし、以下のコメントから、エラーメッセージはツールがMVCの間違ったバージョンを完全に使用していることを暗示しており、このフォルダーを削除しても問題は解決しません。私の知る限り、既知の解決策はありません。
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>
Host-> factoryTypeはversion:4.0.0.0に設定されていて、これが誰にも役立つことを願っています。
ここですべてのソリューションを試してみましたが、どれもうまくいきませんでした。繰り返しますが、サイトは正常に動作しますが、インテリセンスがなく、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.BeginForm
、ViewBag.Title
などのようなものの下に未知の赤い線が表示されなくなりました。
私はプロジェクトをきれいに実行し、すべてをインストールまたは再インストールしましたが、私のサイトが正常にコンパイルおよび実行されていたにもかかわらず、まだ多くのIntellisenseエラーが発生していました。 Viewsフォルダのweb.configファイルのバージョン番号を変更したとき、Intellisenseがようやく機能しました。私の場合、MVCエリアで実行されるOrchardのモジュールをコーディングしていますが、これはMVCの最新リリースを使用しているすべての人に役立つと思います。ここに私の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.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>
Views/Web.config
を/Shared
にコピーする必要があります。これにより、MVCベースタイプとパーサーを使用するようにRazorに指示します。詳細はこちらをご覧ください: http://blog.slaks.net/2011/02/dissecting-razor-part-3-razor-and-mvc.html
Visual Studio 2013
からVisual Studio 2015
にアップグレードした後、この問題に対処していました。この投稿および他の同様のSO投稿で見つかったアドバイスのほとんどを試した後、最終的に問題を発見しました。修正の最初の部分は、私のNuGet
をすべて最新バージョンに更新することでした(Nuget
バグが発生している場合は、VS13
でこれを行う必要があるかもしれません) ViewsWeb.config
にリストされているバージョンを修正する必要があるかもしれません。これも:
MVC
バージョンとその子ライブラリを新しいバージョンに修正します(References
を展開してから、[Sytem.Web.MVC
]を右クリックし、Properties
をタップしてバージョンを取得します)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>
すべてを無駄に試してみましたが、私の場合、Webプロジェクトのcsprojファイルの属性値が正しくないため、機能していないことがわかりました。 ToolsVersionを14に変更すると、現在のIDEバージョン(つまりVisual Studio 2015)に一致し、すべてが魅力的に機能しました。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition=
.....
契約の世界では、古いイメージを使用しているマシンを頻繁に使用しています。上記のすべてを試した後、VS 2013を最新バージョンに更新することにしました(Update 4)。 90分後に再起動すると、参照は正常に機能しています。お役に立てれば!
プロジェクトをVS 2013からVS 2015に移行した後にこれに苦しんでいる人のために、ASP.NETツールアップデートを https://visualstudiogallery.msdn.Microsoft.com/からインストールすることにより、この問題を修正できましたc94a02e9-f2e9-4bad-a952-a63a967e3935/file/77371/6/AspNet5.ENU.RC1_Update1.exe?SRC = VSIDE&UPDATE = TRUE 。
Visual Studio 2017ユーザー向けの更新:
Visual Studio 2017に移行したばかりで、プロジェクトがMVC4である場合は、VS2017インストーラーに戻り、「ASP.NETとWeb開発」セクションの下のMVC4オプションを確認してください。これはオプションのコンポーネントであり、デフォルトではチェックされていません。
これで問題が解決しました
Matt DeKreyの答えを拡張するために、csproj.userファイルを削除するだけで(ソリューションを再作成する必要はありません)、問題を解決できました。
唯一の副作用は、特定のページを使用するように開始アクションをリセットする必要があったことです。
最近同じ問題が発生し、これが私がそれを修正した方法です:Visual Studioで問題のプロジェクトを開いて、Goto:
それはあなたのプロジェクトに欠けているものをロードし、すべてが軌道に戻るはずです。
この問題を解決するには、MSDNの次の記事を使用しました(この場合、MVC 4からMVC 5)
記事からの主な抜粋は次のとおりです。
ランタイムブロックで、System.Web.Mvcを5.0.0.0に、System.Web.Helpersを3.0.0.0に、System.Web.WebPagesを3.0.0.0に更新します
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
次に、appsettingsブロックを探して、webpages:Versionの値を3.0.0.0に更新します
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
</appSettings>
Host factoryTypeブロックをSystem.Web.Mvcに5.0.0.0に更新します
<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" />
</namespaces>
</pages>
</system.web.webPages.razor>
次に、ページブロックの下で、System.Web.Mvcへの参照を5.0.0.0に更新します。
<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参照を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>
自分で問題の調査を始めたばかりで、これが私の場合のように見えます。 Web設定に正しい値がある場合は、MVC4のバグです。 http://connect.Microsoft.com/VisualStudio/feedback/details/727729/viewbag-not-recognized-in-asp-net-mvc-4-project
*<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>*
この構成が欠落しているため、追加して適切なバージョンのアセンブリを設定します
私の状況は、BaseViewPage
クラスをオーバーライドするWebViewPage
というカスタムクラスを作成した後にのみ発生しました。最初にMain Web.confgファイルに次を追加しました。
<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">
View folder web.configファイルも同じです:
<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">
私は他の多くの答えを試しましたが、BaseViewPage
クラスを維持できるようにしている間、誰もトリックをしませんでした。修正方法は、Main Web.configファイルのみからpageBaseType
属性を削除することでした。 View web.configに保存します。
私もこの特定の問題に遭遇しました。かみそりタグを使用しようとするとインテリセンスが表示されない(または正しくない)。私の特定の問題は、Html.BeginFormが現在のコンテキストに存在しないことを訴えるVS2015でした。
MVCプロジェクトに領域を設定し、エラーの原因をグローバルweb.configではなく特定の領域のweb.configファイルに絞り込むことができました。
私にとってこの問題の原因は、動作していないエリアのweb.configにSQL connectionStringを追加したことでしたが、これは解析エラーを引き起こしましたが、プロジェクトは正しくコンパイルされました。
ConnectionStringをグローバルweb.configに移動すると、問題が修正されました。うまくいけば、これが他の人に役立つかもしれません。
そうです、私はしばらくの間この問題を修正しようとしてきました。これに関するさまざまなStack Overflowトピックのすべてのソリューションを使用しましたが、どれも機能していないようです。
今朝問題を修正しました。プロジェクトとビューの両方のweb.configを修正した後、すべての.dllバージョンが参照フォルダーにあるものと一致することを確認します。プロジェクトをアンロードし、.csprojを編集してから、そのファイル内のすべての.dllバージョンを更新する必要があります。
System.Web.Helpers
System.Web.Mvc
System.Web.WebPages
この問題がようやく解決したことを願っています!これ以上赤い波線はありません。
これにより、コントローラーやビューなどを追加するオプションが表示されなかった場所で発生していたコンテキストメニューの問題も修正されました。
私にとっては、それは愚かな展開の間違いでした。Webプロジェクトには複数のweb.configが含まれることがあります。本番環境ではなく開発者のマシンで動作していましたが、展開スクリプトがルートのWeb.config
ファイルのみを取得し、Views
のWeb.config
ファイルをコピーしなかったことに気付きませんでしたフォルダ。
テーマのバリエーションとして、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
を参照する必要がありました。
SOでいくつかの答えに出くわし、最後に、「Html.TextBoxFor」のつづりを間違えたことが私のエラーであることに気付きました。私の場合、私が書いたのは「Html.TextboxFor」です。 TextBoxForでBを大文字にしませんでした。それを修正しました。問題が解決しました。これが誰かの助けになることを願っています。