MVC 4 @Scriptsは「存在しません」


201

ASP.NET MVC 4プロジェクトを作成し、Visual Studio 2012 RCを使用してIndexCreateアクションとコントローラービューとRazorビューを作成しました。

アプリケーションを実行するようになり、Createビューを参照すると、次のエラーが表示されました。

コンパイラエラーメッセージ:CS0103: 'Scripts'という名前は現在のコンテキストに存在しません

問題は、ビューの下部に自動的に追加された次のコードです。

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

スクリプトが存在しないのはなぜですか?

Assembly System.Web.Mvc.dll、v4.0.0.0のベースWebページクラスを見ました

次のヘルパープロパティが利用可能です。

  • アヤックス
  • HTML
  • URL

しかし、スクリプトという名前のものはありません。

何か案は?

編集:

私の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、Visual Studioが生成したビューに追加しても、まだ使用できません!

解決策を以下に示します。

どうやらこれを閉じる方法がわかりません。結局、アップデートで問題が解決したようです。新しいプロジェクトを使用して、クリーンインストールを実行したことを再確認しました。しかし、私が作成した同じ失敗したプロジェクトは、さまざまな更新と手動の明らかな介入なしで今はうまくいきます。すべての考えに感謝しますが、確かに当時問題がありました;)


すでにWeb.configに追加してみますか?<system.web.webPages.razor> <pages pageBaseType=""> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> etc... </pages>
Zach dev

Web.configからセクションを追加しましたが、そのファイルで何も変更していません。
FantasticJamieBurns

6
アプリルートのweb.configではなく、「My Views \ Web.config」ファイルを意味します。とにかく、それは正しくなく、<add namespace = "System.Web.Optimization" />がありません。RCの前にVS12 Betaをインストールしましたか?どのwin8バージョン?
RickAndMSFT

@RickAndMSFTリリースプレビューISOからWin8をクリーンインストールし、VS 2012 RC ISOからもインストールして、バージョンの競合がないことを確認しました。
FantasticJamieBurns

@RickAndMSFT My Views \ Web.configはエリア内のビューを見逃してしまいます
Maslow

回答:


269

ここでの鍵は追加することです

 <add namespace="System.Web.Optimization" /> 

両方のweb.configファイルに。私のシナリオでは、プロジェクトとメイン/ルートのweb.configの両方にSystem.Web.Optimization参照がありましたが、@ Scriptsはまだ正しく機能していませんでした。それを機能させるには、ビューのweb.configファイルに名前空間参照を追加する必要があります。

更新:

MVC 4のリリース以降、System.Web.Optimizationは廃止されました。空のソリューションから始める場合は、次のnugetパッケージをインストールする必要があります。

Install-Package Microsoft.AspNet.Web.Optimization

それでも、web.configファイルでSystem.Web.Optimizationを参照する必要があります。詳細については、このトピックを参照してください。

System.Web.Optimization for MVC-3-converted-to-4アプリへの参照を追加する方法

多くの人が指摘したように、これを機能させるには、上記の手順の後にVSの再起動が必要になる場合があります。


8
またInstall-Package Microsoft.AspNet.Web.Optimization、デフォルトでは含まれていないため、空のASP.NET MVC4テンプレートから実行する必要がある場合もあります。
ポートマン2013

@Portmanはい、実際に空のMVCプロジェクトテンプレートで開始した場合は、Microsoft.AspNet.Web.Optimizationパッケージをインストールする必要があります。
マルコ2013

2
ビューフォルダーのweb.configに追加するだけです。
user1534664 2013

9
これは確かに解決策です。ただし、これを認識させるには、ビジュアルスタジオを再起動する必要がありました。
Jason Eades

4
これをViews / Web.configに追加してから、Visual Studioを再起動する必要がありました。
Caverman 2016

48

@Styles@Scriptsにより提供される2つの新しいヘルパーですSystem.Web.Optimizationライブラリ。名前が示すように、CSSとJavaScriptのファイルまたはリソースをそれぞれバンドルして縮小します。

ディレクティブまたはスルーのSystem.Web.Optimizationいずれかで名前空間を含めてみてください@usingweb.config

http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinification

更新

Microsoftは、バンドル/縮小を別のパッケージに移動しました。 Microsoft.AspNet.Web.Optimizationnugetからアセンブリをダウンロードできます

この投稿は役に立ちます。


2
System.Web.Optimizationを追加すると、「CS0234:名前空間名 'Optimization'は名前空間 'System.Web'に存在しません」と表示されます。追加するSystem.Web.Optimizationと呼ばれる参照はありません。
FantasticJamieBurns

1
System.Web.Optimization名前空間は、これが回答されてから廃止されました。代わりにMicrosoft.AspNet.Web.Optimizationを使用してみてください。詳細は、この質問を参照してください:stackoverflow.com/questions/9475893/...
ジェレミー・ジャレル

3
明確化:System.Web.Optimization名前空間は非推奨ではありませんSystem.Web.Optimization.dll
デスパタール2013年

ありがとう!別のエリアのレイアウトで問題が発生したとき、それは私のために働いています。
開発者

48

上記に欠けている小さなステップが1つありました。これは別の投稿で見つけました。追加後

<add namespace="System.Web.Optimization" />

あなたの~/Views/web.config名前空間、閉じて再オープンのVisual Studio。 これは、これを機能させるために私がしなければならなかったことです。


2
ここでも同じですが、VSの再起動は機能しましたが、その前にまだエラーが表示されていました...?
Andreas

私の場合はVSを閉じる必要はありませんでしたが、使用していた.cshtmlビューを閉じて再度開く必要がありました
joalcego

29

私は領域を使用していて、この問題に直面したばかりです。名前空間をルート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" />

15

私も同じ問題を抱えており、WinMergeを使用してこれを追跡することができました。でも詳しく調べてみると、リックには完璧なブログ投稿があることがわかりましたがあることた。

概要:

  • <add namespace="System.Web.Optimization"/>両方のweb.configファイルに追加
  • 走る Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • バンドルコードの更新
  • レイアウトファイルの更新
  • 最後のステップは、他の10個のライブラリを更新することです。私はしませんでした、そしてそれはうまくいきました。だから、これを先延ばしにできるようです(私がすでに1つ以上更新していない限り)。:)

このダンに答えてくれてありがとう!(そして私のブログを指摘しています)。彼の質問は彼がRCから始めたことを暗示していましたが、私はあなたが正しいと思います。彼はRCのコントローラーをベータプロジェクトに追加しました。
RickAndMSFT

2週間ほど経ちましたが、あなたたち2人は間違いなく2番目に自分を推測しています。私は間違いなく、VSS 2012をMetroアプリ以外に何もなかった私のタブレットに置いて、それが失敗するのを見ました。VMで再試行します。
FantasticJamieBurns

これでうまくいきました。リンク先の記事を読んで、必要な操作の正確な手順を確認してください。
ジャスティン

11

私は同じ問題を抱えていました:

私が使用していたSystem.Web.Optimizationのバージョンは、MVC4 RCでは古くなっています。

VS 2010のパッケージマネージャーを使用してパッケージを更新しました。

このMSDNブログでは、Andy氏がMVC 4ベータプロジェクトをMVC 4 RCに更新する方法について語っています。パッケージを更新すると、スクリプト(特にWeb最適化スクリプト)で解決されます。

最新のSystem.Web.Optimizationパッケージをインストールするには、パッケージマネージャーコンソール([ツール]-> [ライブラリパッケージマネージャー]-> [パッケージマネージャーコンソール])を使用して、以下のコマンドを実行します。

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization

参照には、パッケージに含まれているSystem.Web.Optimizationファイルを使用します。

他のパッケージを更新するには:[ツール]メニュー-> [ライブラリパッケージマネージャー]-> [ソリューションのNuGetパッケージの管理]。


5

新しいMVC 4 RCインターネットアプリケーションを作成して実行します。同じコードを使用するログインに移動します

 @section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Login.cshtmlが機能するのは、Views \ Web.configファイル(アプリのルートバージョンではない)に含まれる

<namespaces>

    <add namespace="System.Web.Optimization"/>

  </namespaces>

作成ビューが機能せず、ログインが機能しないのはなぜですか?


私はログインを使用していませんでした-当時は壊れていたのかもしれません。
FantasticJamieBurns

5

次のように、かみそりビューの上にSystem.Web.Optimizationをインポートします。

@using System.Web.Optimization

3

次のコマンドを実行しているときにこの問題に遭遇しました:

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization 

私は不可解なメッセージを受け取りました(最初のコーヒー1杯の前に素晴らしいしゃれが大好きです):

Install-Package:指定された暗号化アルゴリズムはこのプラットフォームではサポートされていません。

私はこれを(選択ではなく)Windows XP SP3で実行しており、ASP.NETフォーラムでユーザーartsnobが投稿した指示に従う必要があることがわかりました。

  • Nugetをアンインストールして、再インストールしてみてください。これを実行できない場合は、管理者としてログインしてください。
  • Tools => Extension Manager =>「Nuget Package Manager」を選択してください=> UnInstall
  • 「Nuget」を検索して、もう一度インストールします=>インストール。
  • 動作しない場合は、以前の投稿で述べたように1.7.xバージョンをインストールしてみてください(つまり、以前のバージョンを使用する必要があります。問題なく動作する場合は、このバグを報告して取得できます。最新バージョンのパッチ)。

これを実行したら、コマンドラインを実行してWeb.Optimizationを更新できます。

これが誰かの掘り下げを保存することを願っています。


2

書くだけ

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}

@archil交換をありがとう-それは良い一時的な解決策になるでしょう。しかし、主な質問は、「スクリプトが存在しないのはなぜですか」でした。
FantasticJamieBurns

@ジェイミーはそれが存在する必要がありますか?つまり、私が覚えている限り、Sciptsヘルパーはそこにはいません。たぶんあなたはいくつかのサードパーティのヘルパーを使用しようとしていますか?
archil

1
私はそのコードを自分で追加しませんでした-Visual Studio 2012 RCは、自分の作成アクションのビューを作成したときにそれを追加しました。どういうわけか私のMVC 4は正しいものではないと思います。:スコットHanselman氏はMVC 4 RCに新たに追加されて失敗構文の言及しているので、それはどこかに働かなければならないhanselman.com/blog/...
FantasticJamieBurns

1

ベータ版からRCにアップグレードし、「スクリプト」が存在しない問題に直面しました。ウェブ全体でサーフィンし、最終的な解決策は、N40JPJの発言に加えて、別の作業です。

以下を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)
}

それが役に立てば幸い。


1
if (IsSectionDefined())を提供しない限り、使用する必要はありませんelse。あなたが言っrequired: falseているという事実は、そのセクションが定義されていないことを許可し、その場合、セクションは省略されます。したがって、これは不要な追加コードです。
ErikE 2016年

0

どうやら、 'Scripts'フォルダなしで 'Empty'プロジェクトタイプを作成したようです。私のアドバイス-完全な 'Scripts'フォルダを使用して 'Basic'プロジェクトタイプを作成します。

すべての開発者に関して。


0

コントローラのかみそりビューの作成と編集からコードを削除/非表示にするだけです。

 @section Scripts {  

   @Scripts.Render("~/bundles/jqueryval")  
 }  

0
  1. :ビューページを削除します。
  2. :名前空間webconfigを追加(ビューディレクトリに)
  3. :ビューを作成してみてください!

幸運を...


0

ポットのもう1つ-同じ問題を解決するために費やした年齢-それはルートとビューのルートのweb.configで定義されていますが 誤ってに追加したの<system.web><pages><namespaces>ではなく、<system.web**.webPages.razor**><pages><namespaces>要素。

それを見逃すのは本当に簡単です!


0

このコードがあるページに入ると:

@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)
...

このページのすべてのヒントを試しましたが、どれも解決されませんでした。したがって、Packagesフォルダーを調べたところ、System.Web.Optmization.dllには2つのバージョンがあることがわかりました。

  • Microsoft.AspNet.Web.Optimization.1.1.0 (v1.1.30515.0-68,7KB)
  • Microsoft.Web.Optimization.1.0.0-beta (v1.0.0.0-304KB)

私のプロジェクトは古いベータ版を参照していました。参照を新しいバージョン(69KB)に変更しただけで、すべて正常に動作しました。

誰かを助けるかもしれないと思います。


0

それには明らかな解決策があります。後で同じ問題が発生しました。アセンブリ参照または...とは関係ありません。複雑なページ構造がある場合、MVCパーシャルビューの階層呼び出しで発生します。したがって、各ページ(マスターページまたはパーシャル)で各部分を個別に呼び出し/レンダリングすると、次のコードのようにページの必要な部分が表示されなくなります。

@RenderSection("Scripts", required: false)

それは単にページに関連セクションを見つけてレンダリングさせるだけで、失敗した場合はあなたのようなエラーメッセージを表示します。

依存関係検出するために、マスターからそのすべてのパーシャルまでページを(プログラムトレースのように)トレースすることをお勧めします。多分それはひどい仕事かもしれませんが、ここでは他に選択肢はありません。

私の経験によれば、プログラミングの条件によっては、正しいエラーが表示されないことが問題の原因となっています。


0

何もないプロジェクトにエリアを追加した後、この問題が発生しました。それを取り除くために、ルートのViewsフォルダーを含むweb.configをエリアのViewsフォルダーにコピーするだけで動作しました。


0

MvcMusicStoreでこの問題を解決するには、_Layout.cshtmlにコードのこの部分を追加します

@if (IsSectionDefined("scripts")) 
{
       @RenderSection("scripts", required: false)
}

このコードをEdit.cshtmlから削除します

 @section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

inshallahが動作するプログラムを実行します。


0

私にとってこれは問題を解決しました、NuGetパッケージマネージャーコンソールで次のように書きます:

update-package microsoft.aspnet.mvc -reinstall

0

MVC4を最近使い始めたとき、空のテンプレートでプロジェクトを作成しているときに上記の問題に直面しました。問題を修正する手順。

  1. 移動TOOLS-> Library Package Manager-> Packager Manager Console 以下のコマンドを貼り付けてEnterキーを押します Install-Package Microsoft.AspNet.Web.Optimization キーます。注:インストールが完了するまで待ちます。
  2. ルートレベルのWeb.Configファイルに移動し、ページの名前空間セクションの名前空間の下に追加します。追加<namespace="System.Web.Optimization" />
  3. ViewsフォルダーのWeb.Configに移動し、手順2に従います。
  4. ソリューションをビルドして実行します。

手順1で説明したパッケージは、System.Web.OptimizationがMVC4の空のテンプレートのデフォルト参照ではないように、ソリューション参照にいくつかのシステムライブラリを追加します。

これがお役に立てば幸いです。ありがとうございました


0

プロジェクトをMVC3からMVC4にアップグレードするときに、非常によく似たエラーが発生しました。

コンパイラのエラーメッセージ:CS0103:名前[blah]は現在のコンテキストに存在しません

私の場合、いくつかのWeb.Configsのバージョン番号が古くなっています。

  1. プロジェクトのすべてのWeb.ConfigでSystem.Web.Mvcのバージョン番号を「3.0.0.0」から「4.0.0.0」に更新する必要がありました。
  2. プロジェクトのすべてのWeb.Configで、すべてのSystem.Web.WebPages、System.Web.Helpers、およびSystem.Web.Razorのバージョン番号を「1.0.0.0」から「2.0.0.0」に更新する必要がありました。

例:

<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.Configsを確認してください。

ASP.NET MVC 3プロジェクトのASP.NET MVC 4へのアップグレードの詳細については、こちらをご覧ください。


0

web.configに追加してもメッセージが表示される場合は、プロジェクトを閉じて再度開く必要があります。プロジェクトが存在し、@ Styles.Render( "")と@ Scripts.Render()が正常に機能します。


-1

これを試して:

@section Scripts 
{
    Scripts.Render("~/bundles/jqueryval")  // <- without ampersand at the begin
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.