202

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

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

编译器错误消息:CS0103:当前上下文中不存在名称“脚本”

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

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

为什么脚本不存在?

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

我可以看到以下可用的辅助属性:

  • 阿贾克斯
  • html
  • 网址

但是没有任何名称为脚本。

有任何想法吗?

编辑:

我的 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帮助程序:

@Scripts然而,刚刚将 Visual Studio 2012 RC 安装到全新的 Windows 8 安装中,即使 Visual Studio 将其添加到生成的视图中,我仍然无法使用!

解决方案如下。

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

4

24 回答 24

270

这里的关键是添加

 <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才能完成这项工作。

于 2013-02-10T16:18:19.233 回答
49

@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下载程序集。

这篇文章将对你有用。

于 2012-06-08T18:47:13.430 回答
48

上面少了一个小步骤,我在另一篇文章中找到了。添加后

<add namespace="System.Web.Optimization" />

到您的~/Views/web.config命名空间,关闭并重新打开 Visual Studio。 这是我必须做的才能让它工作。

于 2013-10-14T17:39:36.937 回答
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" />
于 2012-06-15T18:06:25.260 回答
15

我遇到了同样的问题,我使用 WinMerge 来帮助我追踪这个问题。但当我对其进行更多研究时,我发现 Rick 有一个完美的博客文章

概括:

  • 添加<add namespace="System.Web.Optimization"/>到两个 web.config 文件
  • Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • 更新捆绑代码
  • 更新布局文件
  • 最后一步是更新其他 10 个库。我没有,它工作得很好。所以看起来你可以拖延这个(除非我已经更新了其中的一个或多个)。:)
于 2012-06-16T02:59:11.090 回答
11

我遇到过同样的问题:

我使用的 System.Web.Optimization 版本对于 MVC4 RC 来说已经过时了。

我使用 VS 2010 中的包管理器更新了我的包。

在这个MSDN 博客中,Andy 先生谈到了如何将您的 MVC 4 Beta 项目更新为 MVC 4 RC。更新我的包得到了为我解决的脚本(尤其是网络优化):

要安装最新的 System.Web.Optimization 包,请使用包管理器控制台(工具 -> 库包管理器 -> 包管理器控制台)并运行以下命令:

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization

在您的参考资料中使用包中包含的 System.Web.Optimization 文件。

更新其他包:工具菜单 -> 库包管理器 -> 管理解决方案的 NuGet 包。

于 2012-07-03T07:13:26.843 回答
5

创建一个新的 MVC 4 RC 互联网应用程序并运行它。导航到使用相同代码的登录

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

允许 Login.cshtml 工作的是 Views\Web.config 文件(不是应用根版本)包含

<namespaces>

    <add namespace="System.Web.Optimization"/>

  </namespaces>

为什么您的创建视图不起作用而登录是?

于 2012-06-16T00:40:43.953 回答
5

在剃刀视图顶部导入 System.Web.Optimization,如下所示:

@using System.Web.Optimization
于 2017-06-02T09:23:01.853 回答
3

我遇到了这个问题,但是在运行命令时:

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization 

我收到了一个神秘的信息(在第一杯咖啡之前一定要喜欢一个伟大的双关语):

安装包:此平台不支持指定的加密算法。

我在 Windows XP SP3 上运行它(不是选择),我发现我必须遵循用户artsnobASP.NET 论坛上发布的说明

  • 请卸载 Nuget 并尝试重新安装。如果您无法执行此操作,请以管理员身份登录。
  • 转到工具 => 扩展管理器 => 选择“Nuget 包管理器” => 卸载
  • 通过搜索“Nuget”=> 安装再次安装它。
  • 如果还是不行,请尝试安装,1.7.x版本,我在上一篇文章中提到过(不是说,你必须使用以前的版本,如果可以正常,我们可以报告这个错误,并获得最新版本的补丁)。

一旦我运行了它,我就可以运行命令行来更新 Web.Optimization。

希望这可以节省一些人的挖掘。

于 2012-08-08T12:22:43.487 回答
2

写吧

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
于 2012-06-08T16:14:48.120 回答
1

我从 Beta 升级到 RC 并面临“脚本”不存在问题。在网上冲浪,最终的解决方案是 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)
}

希望能帮助到你。

于 2012-07-10T17:51:04.693 回答
0

将项目从 MVC3 升级到 MVC4 时,我遇到了非常相似的错误。

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

就我而言,我的几个 Web.Config 中有过时的版本号。

  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>

请务必查看每个 Views 目录中的 Web.Configs。

您可以阅读有关将 ASP.NET MVC 3 项目升级到 ASP.NET MVC 4 的更多信息。

于 2013-02-13T15:37:54.910 回答
0

显然,您创建了一个没有“脚本”文件夹的“空”项目类型。我的建议 - 创建一个带有完整“脚本”文件夹的“基本”项目类型。

对于所有开发人员。

于 2013-02-26T07:30:20.873 回答
0

只需从控制器的创建和编辑剃刀视图中删除/隐藏代码。

 @section Scripts {  

   @Scripts.Render("~/bundles/jqueryval")  
 }  
于 2013-05-16T08:44:21.027 回答
0
  1. :删除查看页面。
  2. : 添加命名空间 webconfig(在视图目录中)
  3. : 创建视图试试看!

祝你好运...

于 2013-05-23T13:25:04.153 回答
0

还有一个问题 - 花了很长时间试图解决同样的问题 - 即使它是在 web.config 中为 root 和 Views 的根定义的。原来我错误地将它添加到<system.web><pages><namespaces>, 而不是<system.web**.webPages.razor**><pages><namespaces>元素。

真的很容易错过!

于 2013-09-06T15:37:42.167 回答
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-beta (v1.0.0.0 - 304KB)

我的项目引用了旧的 beta 版本。我只更改了对较新版本 (69KB) 的引用,一切正常。

我认为这可能对某人有所帮助。

于 2013-10-18T01:00:00.937 回答
0

这有一个明显的解决方案。我后来也遇到了同样的问题。与Assembly References 或...无关。当您有复杂的页面结构时,它会发生在MVC Partial 视图的层次结构调用中。因此,在每个页面(可能是母版页或部分页面)上分别调用/渲染每个部分将导致看不到页面的所需部分,如以下代码:

@RenderSection("Scripts", required: false)

这只是强制页面查找和呈现相关部分,并在失败的情况下向您显示像您这样的错误消息。

所以我建议你跟踪你的页面(如程序跟踪)从 master 到它的所有部分到Detect Dependencies。也许这是一项糟糕的工作,但这里没有其他选择。

并不是说根据我的经验,编程中的某些条件情况会导致无法向您显示正确的错误会导致问题。

于 2013-10-18T01:21:03.250 回答
0

在将区域添加到没有任何区域的项目后,我遇到了这个问题。为了摆脱它,只需将带有根 Views 文件夹的 web.config 复制到该区域的 Views 文件夹中,它就开始工作了。

于 2013-12-06T12:48:48.380 回答
0

我通过在 _Layout.cshtml 中添加这部分代码来解决 MvcMusicStore 中的这个问题

@if (IsSectionDefined("scripts")) 
{
       @RenderSection("scripts", required: false)
}

并从 Edit.cshtml 中删除此代码

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

运行程序 inshallah 将与您一起工作。

于 2014-03-14T22:11:13.020 回答
0

对我来说,这解决了这个问题,在 NuGet 包管理器控制台中写入以下内容:

update-package microsoft.aspnet.mvc -reinstall
于 2015-10-14T08:08:12.103 回答
0

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

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

步骤 1 中提到的包将向解决方案引用中添加一些系统库,例如 System.Web.Optimization 不是 MVC4 中空模板的默认引用。

我希望这有帮助。谢谢

于 2015-10-25T16:33:33.247 回答
0

如果您添加到 web.config 并且它仍然显示消息,那么您需要关闭您的项目并重新打开它,现在它将存在并且 @Styles.Render("") 和 @Scripts.Render() 将正常工作。

于 2018-07-25T16:47:31.527 回答
-1

试试这个:

@section Scripts 
{
    Scripts.Render("~/bundles/jqueryval")  // <- without ampersand at the begin
}
于 2013-04-14T20:55:29.477 回答