MVC 4 @Scripts“不存在”
我刚刚创build了一个ASP.NET MVC 4项目,并使用Visual Studio 2012 RC创build了一个控制器和Razor视图Index
和Create
操作。
当我来运行应用程序,并浏览到Create
视图时,显示以下错误:
编译器错误消息:CS0103:当前上下文中不存在“脚本”名称
问题是自动添加到视图底部的以下代码:
@section Scripts { @Scripts.Render("~/bundles/jqueryval") }
为什么脚本不存在?
我查看了Assembly System.Web.Mvc.dll,v4.0.0.0中的基本Web页类
我可以看到以下帮助属性可用:
- 阿贾克斯
- HTML
- url
但没有任何命名的脚本。
有任何想法吗?
编辑:
我的Web.config文件看起来像这样(与Visual Studio创build的文件不同):
<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 2012 RC到全新的Windows 8安装,我仍然无法使用@Scripts
即使Visual Studio将其添加到生成的视图!
解决scheme如下。
我不知道如何解决这个问题,因为最后更新似乎解决了这个问题。 我再次检查我已经执行了一个干净的安装,使用一个新的项目。 但同样的失败的项目,我已经做了很好的工作后,各种更新,并没有手动明显的干预。 感谢所有的想法,但当时肯定有一个问题;)
这里的关键是添加
<add namespace="System.Web.Optimization" />
都是web.config文件。 我的情况是,我有项目和主/根web.config System.Web.Optimization参考,但@Scripts仍然无法正常工作。 您需要将命名空间引用添加到Views web.config文件以使其工作。
更新:
自从MVC 4 System.Web.Optimization发布以来已经过时了。 如果你从一个空白的解决scheme开始,你需要安装下面的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
命名空间, closures并重新打开Visual Studio。 这是我得做这个工作。
我正在使用区域,刚刚遇到了这个问题,我只是从根web.config复制命名空间到区域networking。 configuration和它现在工作!
<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" />
我有同样的问题,我用WinMerge来帮助我跟踪这个。 但是,当我研究更多的时候,我发现瑞克拥有完美的博客文章 。
概要:
- 将
<add namespace="System.Web.Optimization"/>
到两个web.config文件中 - 运行
Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
- 更新打包代码
- 更新布局文件
- 最后一步是更新其他10个库。 我没有,它工作得很好。 所以看起来你可以拖延这一个(除非我已经更新了1个或更多)。 🙂
我遇到过同样的问题:
我使用的System.Web.Optimization版本过时了MVC4 RC。
我使用VS 2010中的包pipe理器更新了我的包。
在这个MSDN博客中 ,Andy先生介绍了如何将MVC 4 Beta项目更新到MVC 4 RC。 更新我的软件包得到了脚本(尤其是网页优化)来解决我:
要安装最新的System.Web.Optimization包,请使用包pipe理器控制台(工具 – >库包pipe理器 – >包pipe理器控制台)并运行以下命令:
Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
使用引用中包中包含的System.Web.Optimization文件。
要更新其他软件包:工具菜单 – >库软件包pipe理器 – >pipe理解决scheme的NuGet软件包。
创build一个新的MVC 4 RC互联网应用程序并运行它。 导航到使用相同代码的login
@section Scripts { @Scripts.Render("~/bundles/jqueryval") }
什么允许Login.cshtml工作是Views \ Web.config文件(不是应用程序根版本)包含
<namespaces> <add namespace="System.Web.Optimization"/> </namespaces>
为什么你的创build视图不工作,login是?
在您的razor视图之上导入System.Web.Optimization,如下所示:
@using System.Web.Optimization
我遇到了这个问题,但运行命令时:
Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
我收到了神秘的信息(在第一杯咖啡之前,要好好爱一下):
Install-Package:此平台不支持指定的encryptionalgorithm。
我在Windows XP SP3上运行这个(不是select),我发现我不得不按照用户artsnob在ASP.NET论坛上发布的指示
- 请卸载Nuget并尝试重新安装它。 如果您无法执行此操作,请以pipe理员身份login。
- 转到工具=>扩展pipe理器=>select“Nuget Package Manager”=> UnInstall
- 再次安装,通过search“Nuget”=>安装。
- 如果它不工作,请尝试安装,1.7.x版本,如我在前面的post中提到的(这并不意味着,你必须使用以前的版本,如果它工作正常,我们可以报告这个错误,并得到最新版本的补丁)。
一旦我跑这个我可以运行命令行来更新Web.Optimization。
希望这可以节省一些挖掘。
写吧
@section Scripts{ <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script> }
- :删除查看页面。
- :添加命名空间webconfig(在视图目录中)
- :创build视图一个尝试!
祝你好运…
我从Beta升级到RC,并面临“脚本”不存在的问题。 在networking上冲浪,N40JPJ所说的最终解决scheme是另外一个工作计划:
在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) }
希望能帮助到你。
显然你已经创build了一个'空'的项目types没有'脚本'文件夹。 我的build议 – 创build一个“基本”项目types与完整的“脚本”文件夹。
对于所有的开发者。
只需从您的控制器的创build和编辑razor视图中删除/隐藏代码。
@section Scripts { @Scripts.Render("~/bundles/jqueryval") }
还有一个花费时间试图解决同样的问题 – 即使它是在web.config中为根和视图的根定义的。 原来我错误地将它添加到<system.web><pages><namespaces>
,而不是<system.web**.webPages.razor**><pages><namespaces>
元素。
真的很容易错过!
当我input具有以下代码的页面时:
@section Scripts { @Scripts.Render("~/bundles/jqueryval") }
发生此错误: 错误。 处理您的请求时发生错误。
这个exceptionlogging在我的日志中:
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:
- Microsoft.AspNet.Web.Optimization.1.1.0 (v1.1.30515.0 – 68,7KB)
- Microsoft.Web.Optimization.1.0.0-beta (v1.0.0.0 – 304KB)
我的项目引用了较旧的beta版本。 我只改变了对新版本(69KB)的引用,并且eveything工作正常。
我认为这可能有助于某人。
这有一个明显的解决办法。 后来我也遇到了同样的问题。 不涉及大会参考或…。它会发生在层次结构调用MVC部分视图,当你有复杂的页面结构。 因此,在每个页面上分别调用/渲染每个部分(可能是母版页或部分页面)将导致看不到所需的页面部分,如下面的代码所示:
@RenderSection("Scripts", required: false)
这只是强制页面查找和渲染相关的部分,并在失败的情况下显示你像你这样的错误消息。
所以我build议你跟踪你的页面(如程序跟踪)从主人到所有的部分到检测依赖关系 。 也许这是一个可怕的工作,但在这里没有其他的select。
不是说根据我的经验,在编程的一些条件情况下,不会告诉你正确的错误导致问题。
添加区域到没有任何项目的项目后,我遇到了这个问题。 为了摆脱它只是复制web.config与根视图文件夹到该地区的视图文件夹,它开始工作。
我通过在_Layout.cshtml中添加这部分代码来解决MvcMusicStore中的这个问题
@if (IsSectionDefined("scripts")) { @RenderSection("scripts", required: false) }
并从Edit.cshtml中删除此代码
@section Scripts { @Scripts.Render("~/bundles/jqueryval") }
运行程序inshallah将与您合作。
对我来说这个解决了这个问题,在NuGet包pipe理器控制台中写下如下:
update-package microsoft.aspnet.mvc -reinstall
当我开始使用MVC4最近我遇到了上述问题,同时创build一个项目与空模板。 步骤来解决这个问题。
- 转到
TOOLS
– >Library Package Manager
– >Packager Manager Console
粘贴下面的命令,然后按EnterInstall-Package Microsoft.AspNet.Web.Optimization
注意:等待安装成功。 - 在根级别转到Web.Config文件,并在页面命名空间部分添加下面的命名空间。 添加
<namespace="System.Web.Optimization" />
- 转到视图文件夹中的Web.Config并按照步骤2。
- 构build解决scheme并运行。
在步骤1中提到的包将添加几个系统库到解决scheme的引用,如System.Web.Optimization不是MVC4中的空模板的默认引用。
我希望这有帮助。 谢谢
将项目从MVC3升级到MVC4时,出现了非常类似的错误。
编译器错误消息:CS0103:当前上下文中不存在名称[blah]
就我而言,我的几个Web.Configs版本号已经过时了。
- 我需要在我的项目中的每个Web.Config中将System.Web.Mvc版本号从“3.0.0.0”更新到“4.0.0.0”。
- 我需要在我的项目中的每个Web.Config中更新所有的System.Web.WebPages,System.Web.Helpers和System.Web.Razor版本号从“1.0.0.0”到“2.0.0.0”。
例如:
<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>
请务必查看每个视图目录中的Web.Configs。
您可以阅读更多关于将ASP.NET MVC 3项目升级到ASP.NET MVC 4的信息 。
尝试这个:
@section Scripts { Scripts.Render("~/bundles/jqueryval") // <- without ampersand at the begin }