MVC 4 @Scripts“不存在”

时间:2012-06-08 15:23:09

标签: asp.net-mvc razor

我刚刚创建了一个ASP.NET MVC 4项目,并使用Visual Studio 2012 RC为IndexCreate操作创建了一个Controller和Razor Views。

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

  

编译器错误消息:CS0103:“Scripts”名称不存在于   当前的背景

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

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

为什么脚本不存在?

我查看了Assembly System.Web.Mvc.dll,v4.0.0.0中的基本Web页面类

我可以看到以下帮助器属性:

  • 的Ajax
  • HTML
  • 地址

但没有任何名为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

解决方案如下所示。

我不知道如何关闭它,因为最终更新似乎解决了这个问题。我仔细检查了我使用新项目执行了干净安装。但是,我所做的同样失败的项目现在可以在各种更新后进行,并且没有人工明显的干预。感谢所有的想法,但当时肯定存在问题;)

24 个答案:

答案 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@ScriptsSystem.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
  • 更新捆绑代码
  • 更新布局文件
  • 最后一步是更新10个其他库。我没有,它工作得很好。所以看起来你可以拖延这个(除非我已经更新了1个或更多)。 :)

答案 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 发布的说明进行操作

  • 请卸载Nuget并尝试重新安装。如果您无法执行此操作,请以管理员身份登录。
  • 转到工具=&gt; Extension Manager =&gt;选择“Nuget Package Manager”=&gt;卸载
  • 再次安装,搜索“Nuget”=&gt;安装。
  • 如果它不起作用,请尝试安装,我在上一篇文章中提到的1.7.x版本(这并不意味着,您必须使用以前的版本,如果它工作正常,我们可以报告此错误,并获得最新版本的补丁。

运行后,我可以运行命令行来更新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)

  1. :删除查看页面。
  2. :添加命名空间webconfig(在视图目录中)
  3. :创建视图试试!
  4. 祝你好运......

答案 12 :(得分:0)

当我最近开始使用MVC4时,我在使用空模板创建项目时遇到了上述问题。 解决问题的步骤。

  1. 转到TOOLS - &gt; Library Package Manager - &gt; Packager Manager Console 粘贴以下命令,然后按Enter键 Install-Package Microsoft.AspNet.Web.Optimization 注意:等待安装成功。
  2. 转到根级别的Web.Config文件,并在页面命名空间部分中添加以下命名空间。 添加<namespace="System.Web.Optimization" />
  3. 在Views文件夹中转到Web.Config并按照步骤2进行操作。
  4. 构建解决方案并运行。
  5. 步骤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:

  • Microsoft.AspNet.Web.Optimization.1.1.0 (v1.1.30515.0 - 68,7KB)
  • Microsoft.Web.Optimization.1.0.0-β (v1.0.0.0 - 304KB)

我的项目引用了较旧的测试版。我只更改了对较新版本(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中的版本号已经过时了。

  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”
  3. <强>实施例

    <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
}