MVC 4 @脚本不存在;

我刚刚创建了一个ASP。并使用Visual Studio 2012 RC为IndexCreate动作创建了控制器视图和剃刀视图。

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

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

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

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

为什么脚本不存在?

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

我可以看到以下helper属性可用:

  • Ajax
  • 超文本标记语言
  • Url

但是没有脚本。

什么好主意吗?

编辑:

我的网络。配置文件看起来是这样的(与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安装中,我仍然无法使用@Scripts,即使Visual Studio将它添加到生成的视图中!

解决方案如下。

我不知道如何关闭这个,因为最后更新似乎解决了这个问题。我仔细检查了我是否使用一个新项目进行了一次干净的安装。但我之前做的那个失败的项目,经过多次更新,没有人工干预后,现在可以正常工作了。谢谢你的想法,但当时确实有一个问题;)

180566 次浏览

只写

@section Scripts{
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}

@Styles@ScriptsSystem.Web.Optimization库提供的两个新helper。顾名思义,它们分别捆绑和缩小CSS和JavaScript文件或资源。

尝试通过@using指令或通过web.config包含命名空间System.Web.Optimization

< a href = " http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html BundlingAndMinification " > http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html BundlingAndMinification < / >

更新

微软已经将捆绑/缩小转移到一个名为Microsoft.AspNet.Web.Optimization的单独包中。你可以从nuget下载程序集。

这个帖子将对你有用。

我正在使用区域,并且刚刚遇到了这个问题,我只是从根web复制了名称空间。配置到区域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" />

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

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

什么允许登录。cshtml的工作是Views\Web。配置文件(不是应用程序根版本)包含

<namespaces>


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


</namespaces>

为什么创建视图不工作,登录是?

我有同样的问题,我使用WinMerge来帮助我跟踪这个问题。但是当我研究得更多的时候,我发现Rick有完美的博客

简介:

  • <add namespace="System.Web.Optimization"/>添加到两个web。配置文件
  • 运行Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • 更新捆绑代码
  • 更新布局文件
  • 最后一步是更新其他10个库。我没有,但效果很好。所以看起来你可以拖延这个(除非我已经更新了1个或更多)。:)

我也有同样的问题:

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

我用vs2010中的包管理器更新了我的包。

在这个MSDN的博客,安迪先生谈论如何更新你的MVC 4 Beta项目到MVC 4 RC。更新我的包得到了脚本(特别是网络优化的一个)为我解决:

要安装最新的System.Web.Optimization包,请使用包管理控制台(Tools -> Library package Manager -> package Manager Console)并执行以下命令:

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

在引用中使用包中包含的System.Web.Optimization文件。

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

我从Beta升级到RC,面临“脚本”不存在的问题。在网上冲浪,最终的解决方案是N40JPJ说的加上另一个变通办法:

在View\Web中复制以下内容。配置:

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

希望能有所帮助。

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

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

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

Install-Package:指定的加密算法不是 本平台支持

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

  • 请卸载Nuget并尝试重新安装。如果不能这样做,请以管理员身份登录。
  • 进入Tools=> Extension Manager =>选择“Nuget Package Manager”=> UnInstall
  • 重新安装,通过搜索“Nuget”=>安装。
  • 如果它不工作,请尝试安装,1.7。x版本,正如我在上一篇文章中提到的(这并不意味着,你必须使用以前的版本,如果它工作正常,我们可以报告这个错误,并获得最新版本的补丁)。

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

希望这能帮你省下不少功夫。

这里的关键是加法

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

两种网络。配置文件。我的场景是,我在项目和主/根web中都有System.Web.Optimization引用。config但是@Scripts仍然不能正常工作。您需要将名称空间引用添加到Views web。配置文件使其工作。

更新:

自从MVC 4发布以来,System.Web.Optimization已经过时了。如果你从一个空白的解决方案开始,你需要安装以下nuget包:

Install-Package Microsoft.AspNet.Web.Optimization

你仍然需要在你的网页中引用System.Web.Optimization。配置文件。有关更多信息,请参阅此主题:

如何添加对System.Web.Optimization for mvc-3- conversion -to-4 app的引用

正如许多人指出的那样,在上述步骤之后可能需要VS重启来实现此工作。

当我将一个项目从MVC3升级到MVC4时,我有一个非常相似的错误。

编译器错误信息:CS0103:名称[blah]不存在 当前上下文< / p >

在我的例子中,我的几个web . config中有过时的版本号。

  1. 我需要在每个Web中将System.Web.Mvc版本号从“3.0.0.0”更新为“4.0.0.0”。配置在我的项目。
  2. 我需要更新我所有的System.Web。网页包含。helper和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>

一定要浏览网页。在每个视图目录中配置。

你可以阅读更多关于升级ASP。asp.net MVC 3项目到ASP。Net MVC 4

显然你已经创建了一个没有“脚本”文件夹的“空”项目类型。 我的建议 -创建一个'Basic'项目类型,包含完整的'Scripts'文件夹

对于所有的开发人员。

试试这个:

@section Scripts
{
Scripts.Render("~/bundles/jqueryval")  // <- without ampersand at the begin
}

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

 @section Scripts {


@Scripts.Render("~/bundles/jqueryval")
}
  1. :删除视图页。
  2. 添加命名空间webconfig(在视图目录)
  3. :创建视图试试!

祝你好运…

还有一个是锅——花了很长时间试图解决同样的问题——尽管它是在网络中定义的。配置根和视图的根。结果是我错误地将它添加到<system.web><pages><namespaces>元素,而不是<system.web**.webPages.razor**><pages><namespaces>元素。

真的很容易错过!

上面少了一小步,是我在另一个柱子上找到的。后添加

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

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

当我进入一个页面,有这样的代码:

@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 . optimization .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)

我的项目引用的是旧的测试版。我只是将引用更改为新版本(69KB),一切都工作正常。

我想这可能会对某人有所帮助。

它有一个明显的解。后来我也遇到了同样的问题。与程序集引用或... .无关,它将发生在MVC部分视图的层次结构调用中,当你有复杂的页面结构时。因此,在每个页面上分别调用/呈现每个部分(可能是母版页或部分)将导致看不到页面所需的部分,如下面的代码:

@RenderSection("Scripts", required: false)

这只是迫使页面找到并呈现相关的部分,并在失败的情况下显示您的错误消息。

所以我建议你跟踪你的页面(像程序跟踪一样),从master到它的所有部分,直到检测依赖关系。也许这是一个糟糕的工作,但这里没有其他选择。

并不是说根据我的经验,编程中的一些条件情况会导致没有正确显示错误而导致问题。

我有这个问题后,我添加了一个区域的项目,没有任何。 为了摆脱它,复制了网络。

. config在根目录下的视图文件夹到该区域的视图文件夹,它开始工作

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

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

并从Edit.cshtml中删除此代码

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

对我来说,这解决了问题,在NuGet包管理器控制台写如下:

update-package microsoft.aspnet.mvc -reinstall
当我最近开始使用MVC4时,我在用空模板创建一个项目时遇到了上述问题。

.步骤修复问题
  1. Goto TOOLS——> Library Package Manager——> Packager Manager Console 粘贴下面的命令并按enter Install-Package Microsoft.AspNet.Web.Optimization 注意:等待安装成功。李< / > <李>转到网络上。配置文件在根级别和添加下面的命名空间在页面命名空间部分。 李加<namespace="System.Web.Optimization" /> < / >
  2. 转到网络上。在Views文件夹中进行配置,并执行步骤2。
  3. 构建解决方案并运行。

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

我希望这对你有帮助。 谢谢你< / p >

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

@using System.Web.Optimization

如果你加入你的网。配置和它仍然显示消息,然后你需要关闭你的项目并重新打开它,现在它将存在和@Styles.Render("")和@Scripts.Render()将工作良好。