MVC 4 @Scripts“不存在”
我刚刚创建了一个ASP.NET MVC 4项目,并使用Visual Studio 2012 RC创建了一个控制器和Razor视图Index
和Create
操作。
当我开始运行应用程序并浏览到Create
视图时,显示以下错误:
编译器错误消息:CS0103:当前上下文中不存在“脚本”名称
问题是以下代码被自动添加到View的底部:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
为什么脚本不存在?
我查看了Assembly System.Web.Mvc.dll,v4.0.0.0中的基本Web页类
我可以看到以下帮助程序属性可用:
但没有任何命名的脚本。
有任何想法吗?
编辑:
我的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安装中,即使Visual Studio将它添加到生成的View中,我仍然无法使用@Scripts
!
解决方案如下。
我不知道如何关闭这个,因为最终更新似乎解决了这个问题。 我再次检查我已经执行了一个干净的安装,使用一个新的项目。 但是,在我进行了各种更新之后,我所做的同样的失败项目已经很好地工作了,而且没有人工干预。 感谢所有的想法,但当时肯定有一个问题;)
这里的关键是添加
<add namespace="System.Web.Optimization" />
同时存在web.config文件。 我的方案是我在项目和主/根web.config中都有System.Web.Optimization参考,但@Scripts仍然无法正常工作。 您需要将名称空间引用添加到Views web.config文件以使其工作。
更新:
由于MVC 4 System.Web.Optimization的发布现已过时。 如果您从一个空白的解决方案开始,则需要安装以下nuget包:
Install-Package Microsoft.AspNet.Web.Optimization
您仍然需要在web.config文件中引用System.Web.Optimization。 有关更多信息,请参阅此主题:
如何添加对MVC-3-converted-to-4应用程序的System.Web.Optimization的引用
正如许多人指出的那样,在完成上述步骤之后,可能需要重新启动VS。
@Styles
和@Scripts
是System.Web.Optimization
库提供的2个新helper。 顾名思义,它们分别捆绑和缩小CSS和JavaScript文件或资源。
尝试使用@using
指令或通过web.config
包含名称空间System.Web.Optimization
http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinification
UPDATE
微软已经将绑定/缩小版本移到一个名为Microsoft.AspNet.Web.Optimization
的单独包中。 你可以从nuget下载程序集。
这篇文章对你有用。
上面有一小步失踪,这是我在另一篇文章中找到的。 添加后
<add namespace="System.Web.Optimization" />
到你的~/Views/web.config
命名空间, 关闭并重新打开Visual Studio。 这是我必须做的,以实现这个工作。
上一篇: MVC 4 @Scripts "does not exist"
下一篇: How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?