提问者:小点点

MVC 4@Scripts“不存在”


我刚刚创建了一个ASP.NET MVC 4项目,并使用Visual Studio 2012 RC为索引创建操作创建了一个控制器和Razor视图。

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

编译器错误消息:CS0103:名称“Scripts”在当前上下文中不存在

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

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

为什么脚本不存在?

我查看了Assembly System.Web.mvc.dll,V4.0.0.0中的基本Web Page类

我可以看到以下可用的帮助程序属性:

  • Ajax
  • 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帮助程序的博客:

  • Scott HANSELMAN博客
  • codebetter.com

虽然Visual Studio将@scripts添加到生成的视图中,但我刚刚将Visual Studio 2012 RC安装到新的Windows 8安装中,仍然无法使用它!

解决办法如下。

我不确定如何关闭这个,因为最后一个更新似乎解决了这个问题。我仔细检查了一下,我使用了一个新的项目,执行了一个干净的安装。但同样的失败的项目,我曾经做过,现在工作良好,经过各种更新,没有明显的人工干预。感谢所有的想法,但当时肯定有问题;)


共2个答案

匿名用户

这里的关键是添加

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

添加到两个web.config文件。我的场景是,我在项目和主/根web.config中都有system.web.optimization引用,但@scripts仍然不能正常工作。您需要将命名空间引用添加到Views web.config文件以使其工作。

更新:

由于MVC4system.web.optimization的发布已经过时。如果您开始使用空白解决方案,则需要安装以下nuget软件包:

Install-Package Microsoft.AspNet.Web.Optimization

您仍然需要在web.config文件中引用system.web.optimization。有关详细信息,请参阅本主题:

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

正如许多人所指出的,在完成上述步骤后,可能需要重新启动VS以使其工作。

匿名用户

@styles@scriptssystem.web.optimization库提供的两个新帮助程序。顾名思义,它们分别捆绑和缩小了CSS和JavaScript文件或资源。

尝试通过@using指令或通过web.config包含命名空间system.web.optimization

http://ofps.oreilly.com/titles/9781449320317/ch_clientoptimization.html#bundlingandminification

更新

Microsoft已将绑定/缩放移动到一个名为Microsoft.aspnet.web.optimization的单独包中。您可以从NuGet下载程序集。

这篇文章对你有用。