MVC 4 @Scripts “does not exist”

2019-01-20 23:42发布

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:

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

24条回答
我只想做你的唯一
2楼-- · 2019-01-20 23:48

I upgraded from Beta to RC and faced 'Scripts' does not exist issue. Surfed all over the web and the final solution is what N40JPJ said plus another workaroudn:

Copy the following in 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>

and the following inside View\Shared_Layout.cshtml

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

Hope it helps.

查看更多
唯我独甜
3楼-- · 2019-01-20 23:51

Just write

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
查看更多
你好瞎i
4楼-- · 2019-01-20 23:51

When i started using MVC4 recently i faced the above issue while creating a project with the empty templates. Steps to fix the issue.

  1. Goto TOOLS --> Library Package Manager --> Packager Manager Console Paste the below command and press enter Install-Package Microsoft.AspNet.Web.Optimization Note: wait for successful installation.
  2. Goto Web.Config file in root level and add below namespace in pages namespace section. add <namespace="System.Web.Optimization" />
  3. Goto Web.Config in Views folder and follow the step 2.
  4. Build the solution and run.

The Package mentioned in step 1 will add few system libraries into the solution references like System.Web.Optimization is not a default reference for empty templates in MVC4.

I hope this helps. Thank you

查看更多
兄弟一词,经得起流年.
5楼-- · 2019-01-20 23:53

I had a very similar error when upgrading a project from MVC3 to MVC4.

Compiler Error Message: CS0103: The name [blah] does not exist in the current context

In my case, I had outdated version numbers in several of my Web.Configs.

  1. I needed to update the System.Web.Mvc version number from "3.0.0.0" to "4.0.0.0" in every Web.Config in my project.
  2. I needed to update all of my System.Web.WebPages, System.Web.Helpers, and System.Web.Razor version numbers from "1.0.0.0" to "2.0.0.0" in every Web.Config in my project.

Ex:

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

Be sure to review the Web.Configs in each of your Views directories.

You can read more about Upgrading an ASP.NET MVC 3 Project to ASP.NET MVC 4.

查看更多
一夜七次
6楼-- · 2019-01-20 23:54

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.

查看更多
神经病院院长
7楼-- · 2019-01-20 23:56

Import System.Web.Optimization on top of your razor view as follows:

@using System.Web.Optimization
查看更多
登录 后发表回答