MVC 4 @Scripts "does not exist"

I have just created an ASP.NET MVC 4 project and used Visual Studio 2012 RC to create a Controller and Razor Views for Index and Create Actions.

When I came to run the application, and browsed to the Create view, the following error was shown:

Compiler Error Message: CS0103: The name 'Scripts' does not exist in the current context

The problem is the following code which was added automatically to the bottom of the View:

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

Why does Scripts not exist?

I looked at the base Web Page class in Assembly System.Web.Mvc.dll, v4.0.0.0

I can see the following helper properties available:

  • Ajax
  • Html
  • Url
  • But nothing named Scripts.

    Any ideas?

    EDIT:

    My Web.config file looks like this (untouched from the one that Visual Studio created):

      <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>
    

    EDIT #2:

    People are blogging about using the @Scripts helper:

  • SCOTT HANSELMAN Blog
  • Codebetter.com
  • Yet having just installed Visual Studio 2012 RC onto a fresh Windows 8 install I am still unable to use @Scripts even though Visual Studio adds it to the generated View!

    Solutions are presented below.

    I am not sure how to close this, because in the end an update seemed to resolve the issue. I double checked I had performed a clean install, using a new project. But the same failing project I had made works fine now after various updates and no manual obvious intervention. Thanks for all of the thoughts but there was definitely an issue at the time ;)


    The key here is to add

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

    to BOTH web.config files. My scenario was that I had System.Web.Optimization reference in both project and the main/root web.config but @Scripts still didn't work properly. You need to add the namespace reference to the Views web.config file to make it work.

    UPDATE:

    Since the release of MVC 4 System.Web.Optimization is now obsolete. If you're starting with a blank solution you will need to install the following nuget package:

    Install-Package Microsoft.AspNet.Web.Optimization
    

    You will still need to reference System.Web.Optimization in your web.config files. For more information see this topic:

    How to add reference to System.Web.Optimization for MVC-3-converted-to-4 app

    As many pointed out, restart of VS could be required after the above steps to make this work.


    @Styles and @Scripts are 2 new helpers provided by System.Web.Optimization library. As the name suggests, they bundle and minify CSS and JavaScript files or resources respectively.

    Try including the namespace System.Web.Optimization either by @using directive or through web.config

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

    UPDATE

    Microsoft has moved the bundling/minification to a separate package called Microsoft.AspNet.Web.Optimization . You can download the assembly from nuget.

    This post will be useful to you.


    There was one small step missing from the above, which I found on another post. After adding

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

    to your ~/Views/web.config namespaces, close and re-open Visual Studio. This is what I had to do to get this working.

    链接地址: http://www.djcxy.com/p/20382.html

    上一篇: ASP.NET MVC 4,Web API

    下一篇: MVC 4 @Scripts“不存在”