ASP.NET MVC 4プロジェクトを作成し、Visual Studio 2012 RCを使用してIndex
およびCreate
アクション用のコントローラビューとカミソリビューを作成しました。
アプリケーションを実行してCreate
ビューを参照したときに、次のエラーが表示されました。
コンパイラエラーメッセージ:CS0103: 'Scripts'という名前は現在のコンテキストには存在しません
問題は、ビューの下部に自動的に追加された次のコードです。
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
スクリプトが存在しないのはなぜですか?
Assembly System.Web.Mvc.dll、v4.0.0.0の基本Webページクラスを見ました。
次のようなヘルパープロパティが利用可能です。
しかし、Scriptsという名前はありません。
何か案は?
編集:
私のWeb.configファイルは次のようになっています(Visual Studioが作成したものから変更はありません)。
<system.web.webPages.razor>
<Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.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>
編集#2:
人々は@Scripts
ヘルパーの使用についてブログを書いています:
まだVisual Studio 2012 RCを新しいWindows 8インストールにインストールしたばかりなので、生成されたビューに追加しても@Scripts
を使用できません。
解決策を以下に示します。
最終的にアップデートで問題が解決したようですので、これを閉じる方法がわかりません。新しいプロジェクトを使用して、クリーンインストールを実行したことを再確認しました。しかし、私が作ったのと同じ失敗したプロジェクトは、さまざまな更新と手動の明白な介入の後で今うまく働きます。すべての考えに感謝しますが、当時は間違いなく問題がありました。
ここで重要なのは追加することです
<add namespace="System.Web.Optimization" />
web.configファイルの両方に。私のシナリオは、プロジェクトとメイン/ルートのweb.configの両方にSystem.Web.Optimization参照があるのですが、それでも@スクリプトは正しく機能しませんでした。正しく機能させるには、Viewsのweb.configファイルに名前空間の参照を追加する必要があります。
更新:
MVC 4 System.Web.Optimizationのリリース以降は廃止されました。空の解決策から始めるのであれば、次のnugetパッケージをインストールする必要があります。
Install-Package Microsoft.AspNet.Web.Optimization
それでも、web.configファイルでSystem.Web.Optimizationを参照する必要があります。詳しくは、以下のトピックを参照してください。
MVC-3-to-4アプリケーションのSystem.Web.Optimizationへの参照を追加する方法
多くの人が指摘したように、VSの再起動は、この作業を行うために上記の手順の後に必要となる可能性があります。
私は別の投稿で見つけた上記から欠けている一つの小さなステップがありました。追加した後
<add namespace="System.Web.Optimization" />
あなたの~/Views/web.config
名前空間に対して、Visual Studioを閉じて再度開く。これは私がこれをうまく動かすためにしなければならなかったことである。
@Styles
と@Scripts
は、System.Web.Optimization
ライブラリによって提供される2つの新しいヘルパーです。その名前が示すように、それらはそれぞれCSSとJavaScriptのファイルまたはリソースをバンドルし、縮小します。
System.Web.Optimization
ディレクティブまたは@using
を介してネームスペースweb.config
を含めてみてください
http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinification
UPDATE
Microsoftは、バンドル/縮小をMicrosoft.AspNet.Web.Optimization
という別のパッケージに移動しました。アセンブリは nuget からダウンロードできます。
これ post はあなたに役立つでしょう。
私は地域を使用していて、この問題に遭遇したところです。名前空間をルートのweb.configから地域のWebにコピーしました。設定し、それは今動作します!
<add namespace="System.Web.Helpers" />
<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" />
<add namespace="System.Web.WebPages" />
私は同じ問題を抱えていたので、WinMergeを使用してこれを突き止めました。しかし、もっと詳しく調べてみると、Rickには完璧な ブログ記事 があることがわかりました。
概要:
<add namespace="System.Web.Optimization"/>
を追加しますInstall-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
を実行する私は同じ問題を抱えていた:
私が使用していたSystem.Web.Optimizationのバージョンは、MVC4 RC用のものです。
VS 2010のパッケージマネージャを使用してパッケージを更新しました。
これで MSDNブログ 、Andy氏がMVC 4 BetaプロジェクトをMVC 4 RCに更新する方法について話しています。私のパッケージをアップデートすることは私にとって解決するべきスクリプト(特にウェブ最適化スクリプト)を得ました:
最新のSystem.Web.Optimizationパッケージをインストールするには、パッケージマネージャコンソール([ツール] - > [ライブラリパッケージマネージャ] - > [パッケージマネージャコンソール])を使用して、以下のコマンドを実行します。
Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
参照にパッケージに含まれているSystem.Web.Optimizationファイルを使用してください。
他のパッケージを更新するには、[ツール]メニュー - > [ライブラリパッケージマネージャ] - > [ソリューション用NuGetパッケージの管理]をクリックします。
新しいMVC 4 RCインターネットアプリケーションを作成して実行します。同じコードを使用するログインに移動します
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Login.cshtmlを機能させるものは、Views\Web.configファイル(アプリケーションのルートバージョンではありません)に含まれています。
<namespaces>
<add namespace="System.Web.Optimization"/>
</namespaces>
作成ビューが機能せず、ログインが機能しないのはなぜですか。
以下のように、かみそりビューの上にSystem.Web.Optimizationをインポートします。
@using System.Web.Optimization
私はこの問題に遭遇しました、しかし、コマンドを実行している間:
Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
私は不可解なメッセージを受け取りました(最初の一杯のコーヒーの前に大当たりが大好きです):
Install-Package:指定された暗号化アルゴリズムはこのプラットフォームではサポートされていません。
私はこれをWindows XP SP3(選択によるものではありません)で実行していますが、私が見つけたのはユーザーの投稿artsnobに従う必要があるということです。 ASP.NETフォーラム
これを実行したら、Web.Optimizationを更新するためにコマンドラインを実行できます。
これが誰かが掘るのを救うことを願っています。
書くだけ
@section Scripts{
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
.
私はベータ版からRC版にアップグレードし、「スクリプト」は存在しない問題に直面しました。 N40JPJが言ったことに加えて、もう1つの成果がWeb上でサーフィンされた最終的な解決策です。
View\Web.configに以下をコピーします。
<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.Web.Optimization"/>
<add namespace="System.Web.Helpers"/>
</namespaces>
そしてView\Shared_Layout.cshtmlの内側
@if (IsSectionDefined("scripts"))
{
@RenderSection("scripts", required: false)
}
それが役に立てば幸い。
私はこのコードを持っているページに入ると:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
このエラーが発生します。エラー。要求の処理中にエラーが発生しました。
そして、この例外は私のログに記録されています。
System.Web.HttpException (0x80004005): The controller for path '/bundles/jqueryval' was not found or does not implement IController.
em System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
...
私はこのページですべての助言を試みました、そして、それらのどれも私のために解決しませんでした。だから私は自分のパッケージフォルダを見て、私はSystem.Web.Optmization.dllのための2つのバージョンがあることに気づいた:
私のプロジェクトは古いベータ版を参照していました。参照を新しいバージョン(69KB)に変更しただけで、すべてうまくいきました。
誰かに役立つかもしれないと思います。
私はこの部分のコードを_Layout.cshtmlに追加することでMvcMusicStoreでこの問題を解決します。
@if (IsSectionDefined("scripts"))
{
@RenderSection("scripts", required: false)
}
そして、このコードをEdit.cshtmlから削除します。
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Inshallahプログラムがあなたと一緒に動きます。
もう1つは、同じ問題を解決しようとしていた時代に費やされたものです - たとえそれがrootのweb.configとViewsのルートで定義されていたとしても。結局、<system.web><pages><namespaces>
要素ではなく<system.web**.webPages.razor**><pages><namespaces>
に誤って追加したのです。
それを見逃すことは本当に簡単です!
プロジェクトにAreaを追加した後に、この問題が発生しました。それを取り除くには、単にルートのViewsフォルダを持つweb.configをその領域のViewsフォルダにコピーするだけで動作し始めました。
私が最近MVC4を使い始めたとき、空のテンプレートでプロジェクトを作成している間、私は上記の問題に直面しました。問題を解決するための手順.
TOOLS
- > Library Package Manager
- > Packager Manager Console
以下のコマンドを貼り付けて、enterキーを押してください。Install-Package Microsoft.AspNet.Web.Optimization
注:インストールが正常に完了するまで待ってください。<namespace="System.Web.Optimization" />
を追加手順1で説明したパッケージは、System.Web.Optimizationのようなソリューション参照にシステムライブラリをほとんど追加しません。MVC4の空のテンプレートの既定の参照ではありません。
これが役に立つことを願っています。ありがとうございました
コントローラの作成と編集のかみそりビューからコードを削除/非表示にするだけです。
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
どうやらあなたは 'Scripts'フォルダなしで 'Empty'プロジェクトタイプを作成しました。私のアドバイスは、「Scripts」フォルダ全体を含む「Basic」プロジェクトタイプを作成することです。
すべての開発者に関して。
Web.configに追加してもメッセージが表示される場合は、プロジェクトを閉じて再度開く必要があります。これで、プロジェクトは存在し、@ Styles.Render( "")と@ Scripts.Render()は正常に機能します。
それは明らかな解決策です。私は後で同じ問題を抱えていました。アセンブリ参照には関係ありません...複雑なページ構造がある場合は、MVC部分ビューの階層呼び出しで発生します。そのため、各ページ(おそらくマスターページまたは部分ページ)で各部分を別々に呼び出し/レンダリングすると、次のコードのようにページの必要な部分が表示されなくなります。
@RenderSection("Scripts", required: false)
それは単にページに関連するセクションを見つけてレンダリングさせるだけで、失敗した場合にはあなたのようなエラーメッセージを表示します。
だから私はあなたのページを(プログラムトレースのように)masterからそのパーシャルのすべてまでトレースして依存関係を検出することをお勧めします。ひどい仕事かもしれませんが、他に選択肢はありません。
私の経験によると、プログラミングの条件付き状況によっては正しいエラーが表示されないことが問題の原因となっているわけではありません。
私にとってはこれで問題は解決しました、NuGetパッケージマネージャコンソールで以下のように書いてください。
update-package Microsoft.aspnet.mvc -reinstall
プロジェクトをMVC3からMVC4にアップグレードするときに、非常によく似たエラーがありました。
コンパイラエラーメッセージ:CS0103:名前[blah]は現在のコンテキストに存在しません
私の場合は、いくつかのWeb.Configでバージョン番号が古くなっていました。
例:
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="Host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
...
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add Assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add Assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add Assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
必ず各ViewsディレクトリのWeb.Configを確認してください。
ASP.NET MVC 3プロジェクトからASP.NET MVC 4へのアップグレード についてもっと読むことができます。