MVC 4 @Scripts“不存在”

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

当我来运行应用程序,并浏览到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> } 
  1. :删除查看页面。
  2. :添加命名空间webconfig(在视图目录中)
  3. :创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一个项目与空模板。 步骤来解决这个问题。

  1. 转到TOOLS – > Library Package Manager – > Packager Manager Console粘贴下面的命令,然后按Enter Install-Package Microsoft.AspNet.Web.Optimization注意:等待安装成功。
  2. 在根级别转到Web.Config文件,并在页面命名空间部分添加下面的命名空间。 添加<namespace="System.Web.Optimization" />
  3. 转到视图文件夹中的Web.Config并按照步骤2。
  4. 构build解决scheme并运行。

在步骤1中提到的包将添加几个系统库到解决scheme的引用,如System.Web.Optimization不是MVC4中的空模板的默认引用。

我希望这有帮助。 谢谢

将项目从MVC3升级到MVC4时,出现了非常类似的错误。

编译器错误消息:CS0103:当前上下文中不存在名称[blah]

就我而言,我的几个Web.Configs版本号已经过时了。

  1. 我需要在我的项目中的每个Web.Config中将System.Web.Mvc版本号从“3.0.0.0”更新到“4.0.0.0”。
  2. 我需要在我的项目中的每个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 }