我刚刚创建了一个ASP.NET MVC 4项目,并使用Visual Studio 2012 RC为 Index
和 Create
Actions创建一个Controller和Razor Views .
当我来运行应用程序并浏览到 Create
视图时,显示以下错误:
编译器错误消息:CS0103:当前上下文中不存在名称“Scripts”
问题是以下代码自动添加到视图的底部:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
为什么Scripts不存在?
我查看了Assembly System.Web.Mvc.dll,v4.0.0.0中的基本Web页面类
我可以看到以下帮助器属性:
-
Ajax
-
Html
-
网址
但没有任何一个名为Scripts .
有任何想法吗?
EDIT:
我的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>
EDIT #2:
人们正在写关于使用 @Scripts
助手的博客:
然而,刚刚将Visual Studio 2012 RC安装到新的Windows 8安装上,即使Visual Studio将其添加到生成的View,我仍然无法使用 @Scripts
!
Solutions are presented below.
我不知道如何关闭它,因为最终更新似乎解决了这个问题 . 我仔细检查了我使用新项目执行了干净安装 . 但是,我所做的同样失败的项目现在在各种更新之后工作正常,并且没有人工明显干预 . 感谢所有的想法,但当时肯定存在问题;)
24 回答
在剃刀视图上导入System.Web.Optimization,如下所示:
当我进入具有此代码的页面时:
发生此错误: Error. An error occurred while processing your request.
此异常记录在我的日志中:
我已经尝试了这个页面上的所有提示,但没有一个为我解决 . 所以我查看了我的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)
我的项目引用了较旧的测试版 . 我只更改了对较新版本(69KB)的引用,并且eveything工作正常 .
我认为这可能对某人有所帮助 .
只需删除/隐藏控制器的创建和编辑剃刀视图中的代码 .
对我来说这解决了这个问题,在NuGet包管理器控制台中写道如下:
试试这个:
上面有一个小步骤,我在另一篇文章中找到了 . 添加后
到你的
~/Views/web.config
名称空间, close and re-open Visual Studio. 这是我必须做的才能让它工作 .创建一个新的MVC 4 RC互联网应用程序并运行它 . 导航到使用相同代码的Login
允许Login.cshtml工作的是Views \ Web.config文件(不是应用程序根版本)包含的内容
为什么您的“创建”视图无法正常工作且登录是?
当我最近开始使用MVC4时,我在使用空模板创建项目时遇到了上述问题 . 解决问题的步骤 .
转到
TOOLS
- >Library Package Manager
- >Packager Manager Console
粘贴以下命令并按enterInstall-Package Microsoft.AspNet.Web.Optimization
注意:等待安装成功 .转到根级别的Web.Config文件,并在页面命名空间部分中添加以下命名空间 . 添加
<namespace="System.Web.Optimization" />
转到Views文件夹中的Web.Config并按照步骤2进行操作 .
构建解决方案并运行 .
步骤1中提到的包将在System.Web等的解决方案引用中添加一些系统库.Optimization不是MVC4中空模板的默认引用 .
我希望这有帮助 . 谢谢
这有一个明显的解决方案 . 我以后遇到了同样的问题 . 与程序集引用或...无关 . 当您有复杂的页面结构时,会发生在MVC部分视图的层次结构调用中 . 因此,在每个页面上分别调用/呈现每个部分(可能是母版页或部分页面)将导致看不到页面所需的部分,如下面的代码:
这只是强制页面查找并呈现相关部分,如果失败,则会显示与您类似的错误消息 .
所以我建议你跟踪你的页面(如程序跟踪)从master到它的所有部分到 Detect Dependencies . 也许这是一项糟糕的工作,但这里没有其他选择 .
Not that according to my experience, some conditional situations in programming causes not to show you the right error causes the problem.
我通过在_Layout.cshtml中添加这部分代码来解决MvcMusicStore中的这个问题
并从Edit.cshtml中删除此代码
运行程序inshallah将与您合作 .
如果你添加到你的web.config并且它仍然显示消息,那么你需要关闭你的项目并重新打开它,现在它将存在,@ Styles.Render(“”)和@ Scripts.Render()将正常工作 .
我遇到过同样的问题:
我使用的System.Web.Optimization版本已过时用于MVC4 RC .
我使用VS 2010中的包管理器更新了我的包 .
在这个MSDN blog中,Andy先生谈到了如何将MVC 4 Beta项目更新为MVC 4 RC . 更新我的包得到了脚本(特别是网络优化一个)为我解决:
要安装最新的System.Web.Optimization包,请使用包管理器控制台(工具 - >库包管理器 - >包管理器控制台)并运行以下命令:
使用引用中包中包含的System.Web.Optimization文件 .
要更新其他软件包:工具菜单 - >库软件包管理器 - >管理解决方案的NuGet软件包 .
还有一个用于试图解决相同问题的花盆 - 尽管它是在web.config中为root和Views的根定义的 . 事实证明我错误地将它添加到
<system.web><pages><namespaces>
,而不是<system.web**.webPages.razor**><pages><namespaces>
元素 .真的很容易错过!
我遇到了同样的问题,我使用WinMerge来帮助我追踪它 . 但是当我对它进行更多的研究时,我发现Rick拥有完美的blog post .
摘要:
将
<add namespace="System.Web.Optimization"/>
添加到两个web.config文件中运行
Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
更新捆绑代码
更新布局文件
最后一步是更新10个其他库 . 我没有,它工作得很好 . 所以看起来你可以拖延这个(除非我已经更新了1个或更多) . :)
我遇到了这个问题,但是在运行命令时:
我收到了一个神秘的信息(在第一杯咖啡之前必须爱上一个很棒的双关语):
我在Windows XP SP3上运行此操作(不是选择),我发现我必须按照ASP.NET Forum上的用户artsnob发布的说明操作
请卸载Nuget并尝试重新安装 . 如果您无法执行此操作,请以管理员身份登录 .
转到工具=>扩展管理器=>选择"Nuget Package Manager" =>取消安装
通过搜索"Nuget" =>安装再次安装 .
如果它不起作用,请尝试安装,我在上一篇文章中提到的1.7.x版本(这并不意味着,你必须使用以前的版本,如果它工作正常,我们可以报告这个bug,并获得最新版本的补丁) .
一旦我运行了这个,我就可以运行命令行来更新Web.Optimization .
希望这可以节省一些挖掘的人 .
我从Beta升级到RC并面临'Scripts'不存在的问题 . 浏览网页,最终的解决方案是N40JPJ所说的另外一个workaroudn:
在View \ Web.config中复制以下内容:
以及View \ Shared_Layout.cshtml中的以下内容
希望能帮助到你 .
显然你已经创建了一个没有'Scripts'文件夹的'Empty'项目类型 . 我的建议 - 用完整的'Scripts'文件夹创建一个'Basic'项目类型 .
关于所有开发人员 .
:删除查看页面 .
:添加命名空间webconfig(在视图目录中)
:创建视图一试!
祝好运...
@Styles
和@Scripts
是System.Web.Optimization
库提供的2个新帮助程序 . 顾名思义,它们分别捆绑和缩小CSS和JavaScript文件或资源 .尝试通过
@using
指令或通过web.config
包含命名空间System.Web.Optimization
http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinification
UPDATE
Microsoft已将捆绑/缩小功能移至名为
Microsoft.AspNet.Web.Optimization
的单独程序包中 . 您可以从nuget下载程序集 .这个post对你有用 .
在我将一个区域添加到没有任何项目的项目后,我遇到了这个问题 . 为了摆脱它,只需将带有根视图文件夹的web.config复制到该区域的Views文件夹中,它就开始工作了 .
这里的关键是添加
两个web.config文件 . 我的情况是我在项目和主/根web.config中都有System.Web.Optimization引用,但@Scripts仍然无法正常工作 . 您需要将命名空间引用添加到Views web.config文件以使其工作 .
UPDATE:
自MVC 4发布以来,System.Web.Optimization现已过时 . 如果您从一个空白解决方案开始,则需要安装以下nuget包:
您仍然需要在web.config文件中引用System.Web.Optimization . 有关更多信息,请参阅此主题:
How to add reference to System.Web.Optimization for MVC-3-converted-to-4 app
正如许多人所指出的,在完成上述步骤后,可能需要 restart of VS 才能完成这项工作 .
我正在使用区域,刚刚遇到这个问题,我只是将名称空间从根web.config复制到web区域 . 配置它现在有效!!
写吧
将项目从MVC3升级到MVC4时,我遇到了类似的错误 .
就我而言,我的几个Web.Configs中的版本号已经过时了 .
我需要在项目的每个Web.Config中将System.Web.Mvc版本号从"3.0.0.0"更新为"4.0.0.0" .
我需要更新我的所有System.Web.WebPages,System.Web.Helpers,我的项目中的每个Web.Config中的"1.0.0.0"到"2.0.0.0"的System.Web.Razor版本号 .
Ex:
请务必查看每个Views目录中的Web.Configs .
您可以阅读有关Upgrading an ASP.NET MVC 3 Project to ASP.NET MVC 4的更多信息 .