MVC 4 @Scripts"不存在"

Fan*_*rns 200 asp.net-mvc razor

我刚刚创建了一个ASP.NET MVC 4项目,并使用Visual Studio 2012 RC创建了一个Controller和Razor Views for IndexCreateActions.

当我来运行应用程序并浏览到Create视图时,显示以下错误:

编译器错误消息:CS0103:当前上下文中不存在名称"脚本"

问题是以下代码自动添加到视图的底部:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Run Code Online (Sandbox Code Playgroud)

为什么Scripts不存在?

我查看了Assembly System.Web.Mvc.dll,v4.0.0.0中的基本Web页面类

我可以看到以下帮助器属性:

  • 阿贾克斯
  • HTML
  • 网址

但没有任何一个名为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>
Run Code Online (Sandbox Code Playgroud)

编辑#2:

人们正在写关于使用@Scripts帮助者的博客:

然而,刚刚将Visual Studio 2012 RC安装到新的Windows 8安装上,@Scripts即使Visual Studio将其添加到生成的View中,我仍然无法使用!

解决方案如下.

我不知道如何关闭它,因为最终更新似乎解决了这个问题.我仔细检查了我使用新项目执行了干净安装.但是,我所做的同样失败的项目现在可以在各种更新后进行,并且没有人工明显的干预.感谢所有的想法,但当时肯定存在问题;)

Mar*_*rko 266

这里的关键是添加

 <add namespace="System.Web.Optimization" /> 
Run Code Online (Sandbox Code Playgroud)

两个web.config文件.我的方案是我在项目和主/根web.config中都有System.Web.Optimization引用,但@Scripts仍然无法正常工作.您需要将名称空间引用添加到Views web.config文件以使其工作.

更新:

自MVC 4发布以来,System.Web.Optimization现已过时.如果您从一个空白解决方案开始,则需要安装以下nuget包:

Install-Package Microsoft.AspNet.Web.Optimization
Run Code Online (Sandbox Code Playgroud)

您仍然需要在web.config文件中引用System.Web.Optimization.有关更多信息,请参阅此主题:

如何为MVC-3-converted-to-4 app添加对System.Web.Optimization的引用

正如许多人所指出的,在完成上述步骤后,可能需要重新启动VS.

  • 这确实是解决方案.但是,我需要重新启动visual studio才能识别它. (9认同)
  • 您可能还必须从空白的ASP.NET MVC4模板运行"Install-Package Microsoft.AspNet.Web.Optimization",因为默认情况下它不包含在内. (8认同)
  • 我必须将它添加到我的Views/Web.config,然后重新启动Visual Studio. (4认同)
  • 它只需要添加到Views文件夹中的web.config中. (2认同)

VJA*_*JAI 48

@Styles并且@ScriptsSystem.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下载程序集.

这篇文章对你有用.

  • 澄清:不推荐使用`System.Web.Optimization`命名空间,`System.Web.Optimization.dll`是. (3认同)
  • 添加System.Web.Optimization说"CS0234:命名空间'System.Web'中不存在类型或命名空间名称'优化'.没有名为System.Web.Optimization的引用要添加. (2认同)
  • @Despertar你是对的.更新了答案. (2认同)

小智 48

上面有一个小步骤,我在另一篇文章中找到了.添加后

<add namespace="System.Web.Optimization" />
Run Code Online (Sandbox Code Playgroud)

到您的~/Views/web.config命名空间,关闭并重新打开Visual Studio. 这是我必须做的才能让这个工作.

  • 同样在这里,重启VS工作但在此之前它仍然显示错误......? (2认同)

小智 30

我正在使用区域,刚刚遇到这个问题,我只是将名称空间从根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" />
Run Code Online (Sandbox Code Playgroud)


Dan*_*man 15

我遇到了同样的问题,我使用WinMerge来帮助我追踪这个问题.但是当我对它进行更多的研究时,我发现Rick有一个完美的博客文章.

摘要:

  • 添加<add namespace="System.Web.Optimization"/>到两个web.config文件
  • Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • 更新捆绑代码
  • 更新布局文件
  • 最后一步是更新10个其他库.我没有,它工作得很好.所以看起来你可以拖延这个(除非我已经更新了1个或更多).:)


WWC*_*WWC 11

我遇到过同样的问题:

我使用的System.Web.Optimization版本已过时用于MVC4 RC.

我使用VS 2010中的包管理器更新了我的包.

在这篇MSDN博客中,Andy先生谈到了如何将MVC 4 Beta项目更新为MVC 4 RC.更新我的软件包得到了脚本(特别是Web优化版)以便我解决:

要安装最新的System.Web.Optimization包,请使用包管理器控制台(工具 - >库包管理器 - >包管理器控制台)并运行以下命令:

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
Run Code Online (Sandbox Code Playgroud)

使用引用中包中包含的System.Web.Optimization文件.

要更新其他软件包:工具菜单 - >库软件包管理器 - >管理解决方案的NuGet软件包.


Ric*_*SFT 5

创建一个新的MVC 4 RC互联网应用程序并运行它.导航到使用相同代码的Login

 @section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Run Code Online (Sandbox Code Playgroud)

允许Login.cshtml工作的是Views\Web.config文件(不是应用程序根版本)包含的内容

<namespaces>

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

  </namespaces>
Run Code Online (Sandbox Code Playgroud)

为什么您的Create视图无法正常工作且Login是?


小智 5

在剃刀视图上导入System.Web.Optimization,如下所示:

@using System.Web.Optimization
Run Code Online (Sandbox Code Playgroud)