我刚刚创建了一个ASP.NET MVC 4项目,并使用Visual Studio 2012 RC为Index
和Create
操作创建了一个Controller和Razor Views。
当我开始运行应用程序并浏览到Create
视图时,显示以下错误:
编译器错误消息:CS0103:“Scripts”名称不存在于 当前的背景
问题是以下代码自动添加到视图的底部:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
为什么脚本不存在?
我查看了Assembly System.Web.Mvc.dll,v4.0.0.0中的基本Web页面类
我可以看到以下帮助器属性:
但没有任何名为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>
编辑#2:
人们正在撰写关于使用@Scripts
帮助者的博客:
然而,刚刚将Visual Studio 2012 RC安装到新的Windows 8安装上,即使Visual Studio将其添加到生成的View中,我仍然无法使用@Scripts
!
解决方案如下所示。
我不知道如何关闭它,因为最终更新似乎解决了这个问题。我仔细检查了我使用新项目执行了干净安装。但是,我所做的同样失败的项目现在可以在各种更新后进行,并且没有人工明显的干预。感谢所有的想法,但当时肯定存在问题;)
答案 0 :(得分:265)
这里的关键是添加
<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。有关更多信息,请参阅此主题:
How to add reference to System.Web.Optimization for MVC-3-converted-to-4 app
许多人指出,在完成上述步骤后,可能需要重新启动VS 。
答案 1 :(得分:48)
@Styles
和@Scripts
是System.Web.Optimization
库提供的2个新助手。顾名思义,它们分别捆绑和缩小CSS和JavaScript文件或资源。
尝试通过System.Web.Optimization
指令或通过@using
web.config
<德尔> http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinification 德尔>
<强>更新强>
Microsoft已将捆绑/缩小功能移至名为Microsoft.AspNet.Web.Optimization
的单独程序包中。您可以从nuget下载程序集。
此post对您有用。
答案 2 :(得分:48)
上面有一个小步骤,我在另一篇文章中找到了。添加后
<add namespace="System.Web.Optimization" />
到您的~/Views/web.config
命名空间,关闭并重新打开Visual Studio。这是我必须要做的才能让它工作。
答案 3 :(得分: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" />
答案 4 :(得分:15)
我遇到了同样的问题,我使用WinMerge来帮助我追踪这个问题。但是当我对它进行更多的研究时,我发现Rick对它有完美的blog post。
要点:
<add namespace="System.Web.Optimization"/>
添加到两个web.config文件Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
答案 5 :(得分:11)
我有同样的问题:
我使用的System.Web.Optimization版本已过时用于MVC4 RC。
我使用VS 2010中的包管理器更新了我的包。
在此MSDN blog中,Andy先生谈到了如何将MVC 4 Beta项目更新为MVC 4 RC。更新我的软件包得到了脚本(特别是Web优化版)以便我解决:
要安装最新的System.Web.Optimization包,请使用Package Manager控制台(工具 - &gt; Library Package Manager - &gt; Package Manager控制台)并运行以下命令:
Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
使用参考文件包中包含的System.Web.Optimization文件。
更新其他套餐: 工具菜单 - &gt;库包管理器 - &gt;管理NuGet包以获得解决方案。
答案 6 :(得分:5)
创建一个新的MVC 4 RC互联网应用程序并运行它。导航到使用相同代码的Login
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
允许Login.cshtml工作的是Views \ Web.config文件(不是应用程序根版本)包含
<namespaces>
<add namespace="System.Web.Optimization"/>
</namespaces>
为什么您的“创建”视图无法正常工作且“登录”是什么?
答案 7 :(得分:5)
在剃刀视图上导入System.Web.Optimization,如下所示:
@using System.Web.Optimization
答案 8 :(得分:3)
我遇到了这个问题,但是在运行命令时:
Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
我收到了一个神秘的信息(在第一杯咖啡之前必须爱上一个很棒的双关语):
Install-Package:指定的加密算法不是 在这个平台上得到支持。
我在Windows XP SP3上运行此操作(不是选择),我发现我必须按照ASP.NET Forum上的用户 artsnob 发布的说明进行操作
运行后,我可以运行命令行来更新Web.Optimization。
希望这可以节省一些人挖掘。
答案 9 :(得分:2)
只需写下
@section Scripts{
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
答案 10 :(得分:1)
我从Beta升级到RC并面临'Scripts'不存在的问题。网上冲浪,最终解决方案是N40JPJ所说的另外一个workaroudn:
在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>
以及View \ Shared_Layout.cshtml中的以下内容
@if (IsSectionDefined("scripts"))
{
@RenderSection("scripts", required: false)
}
希望它有所帮助。
答案 11 :(得分:1)
答案 12 :(得分:0)
当我最近开始使用MVC4时,我在使用空模板创建项目时遇到了上述问题。 解决问题的步骤。
TOOLS
- &gt; Library Package Manager
- &gt; Packager Manager Console
粘贴以下命令,然后按Enter键
Install-Package Microsoft.AspNet.Web.Optimization
注意:等待安装成功。 <namespace="System.Web.Optimization" />
步骤1中提到的Package会将少量系统库添加到解决方案引用中,例如System.Web.Optimization不是MVC4中空模板的默认引用。
我希望这会有所帮助。 谢谢
答案 13 :(得分:0)
对我来说这解决了这个问题,在NuGet包管理器控制台中写下如下:
update-package microsoft.aspnet.mvc -reinstall
答案 14 :(得分:0)
我通过在_Layout.cshtml中添加这部分代码来解决MvcMusicStore中的这个问题
@if (IsSectionDefined("scripts"))
{
@RenderSection("scripts", required: false)
}
并从Edit.cshtml中删除此代码
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
运行程序inshallah将与您合作。
答案 15 :(得分:0)
如果您添加到web.config并且它仍然显示消息,那么您需要关闭您的项目并重新打开它,现在它已经存在,并且@ Styles.Render(“”)和@ Scripts.Render()可以工作很好。
答案 16 :(得分:0)
在我将一个区域添加到没有任何区域的项目后,我遇到了这个问题。 为了摆脱它,只需将带有根视图文件夹的web.config复制到该区域的Views文件夹中,它就开始工作了。
答案 17 :(得分:0)
这有一个明显的解决方案。我以后遇到了同样的问题。与程序集引用或...无关。当您有复杂的页面结构时,会发生在MVC部分视图的层次结构调用中。因此,在每个页面上分别调用/呈现每个部分(可能是母版页或部分页面)将导致看不到页面所需的部分,如下面的代码:
@RenderSection("Scripts", required: false)
这只是强制页面查找并呈现相关部分,如果失败,则会显示与您类似的错误消息。
所以我建议你跟踪你的页面(如程序跟踪)从master到其所有部分到 Detect Dependencies 。也许这是一项糟糕的工作,但这里没有其他选择。
根据我的经验,并非根据我的经验,编程中的某些条件情况不会向您显示正确的错误导致问题。
答案 18 :(得分:0)
当我进入包含此代码的页面时:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
发生此错误:错误。处理您的请求时出错。
此异常记录在我的日志中:
System.Web.HttpException (0x80004005): The controller for path '/bundles/jqueryval' was not found or does not implement IController.
em System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
...
我已经尝试了这个页面上的所有提示,但没有一个为我解决。所以我查看了我的Packages文件夹,注意到我有两个版本的System.Web.Optmization.dll:
我的项目引用了较旧的测试版。我只更改了对较新版本(69KB)的引用,并且eveything工作正常。
我认为这可能有助于某人。
答案 19 :(得分:0)
还有一个用于试图解决相同问题的花盆 - 尽管它是在web.config中为root和Views的根定义的。事实证明我错误地将它添加到<system.web><pages><namespaces>
,而不是<system.web**.webPages.razor**><pages><namespaces>
元素。
真的很容易错过!
答案 20 :(得分:0)
只需从create&amp;中删除/隐藏代码编辑控制器的剃刀视图。
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
答案 21 :(得分:0)
显然你创建了一个没有'Scripts'文件夹的'Empty'项目类型。 我的建议 - 使用完整的“Scripts”文件夹创建“基本”项目类型。
关于所有开发者。
答案 22 :(得分:0)
将项目从MVC3升级到MVC4时,我遇到了类似的错误。
编译器错误消息:CS0103:名称[blah]不存在于 当前背景
就我而言,我的几个Web.Configs中的版本号已经过时了。
<强>实施例强>
<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>
请务必查看每个Views目录中的Web.Configs。
您可以阅读有关Upgrading an ASP.NET MVC 3 Project to ASP.NET MVC 4的更多信息。
答案 23 :(得分:-1)
试试这个:
@section Scripts
{
Scripts.Render("~/bundles/jqueryval") // <- without ampersand at the begin
}