首页 文章

MVC 4 @Scripts“不存在”

提问于
浏览
196

我刚刚创建了一个ASP.NET MVC 4项目,并使用Visual Studio 2012 RC为 IndexCreate 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 回答

  • 0

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

    @using System.Web.Optimization
    
  • 46

    当我进入具有此代码的页面时:

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

    发生此错误: Error. An error occurred while processing your request.

    此异常记录在我的日志中:

    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)

    我的项目引用了较旧的测试版 . 我只更改了对较新版本(69KB)的引用,并且eveything工作正常 .

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

  • 0

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

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

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

    update-package microsoft.aspnet.mvc -reinstall
    
  • 0

    试试这个:

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

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

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

    到你的 ~/Views/web.config 名称空间, close and re-open Visual Studio. 这是我必须做的才能让它工作 .

  • 11

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

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

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

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

    为什么您的“创建”视图无法正常工作且登录是?

  • 3

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

    • 转到 TOOLS - > Library Package Manager - > Packager Manager Console 粘贴以下命令并按enter Install-Package Microsoft.AspNet.Web.Optimization 注意:等待安装成功 .

    • 转到根级别的Web.Config文件,并在页面命名空间部分中添加以下命名空间 . 添加 <namespace="System.Web.Optimization" />

    • 转到Views文件夹中的Web.Config并按照步骤2进行操作 .

    • 构建解决方案并运行 .

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

    我希望这有帮助 . 谢谢

  • 30

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

    @RenderSection("Scripts", required: false)
    

    这只是强制页面查找并呈现相关部分,如果失败,则会显示与您类似的错误消息 .

    所以我建议你跟踪你的页面(如程序跟踪)从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.

  • 0

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

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

    并从Edit.cshtml中删除此代码

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

    运行程序inshallah将与您合作 .

  • 0

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

  • 0

    我遇到过同样的问题:

    我使用的System.Web.Optimization版本已过时用于MVC4 RC .

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

    在这个MSDN blog中,Andy先生谈到了如何将MVC 4 Beta项目更新为MVC 4 RC . 更新我的包得到了脚本(特别是网络优化一个)为我解决:

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

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

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

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

  • 1

    还有一个用于试图解决相同问题的花盆 - 尽管它是在web.config中为root和Views的根定义的 . 事实证明我错误地将它添加到 <system.web><pages><namespaces> ,而不是 <system.web**.webPages.razor**><pages><namespaces> 元素 .

    真的很容易错过!

  • 5

    我遇到了同样的问题,我使用WinMerge来帮助我追踪它 . 但是当我对它进行更多的研究时,我发现Rick拥有完美的blog post .

    摘要:

    • <add namespace="System.Web.Optimization"/> 添加到两个web.config文件中

    • 运行 Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization

    • 更新捆绑代码

    • 更新布局文件

    • 最后一步是更新10个其他库 . 我没有,它工作得很好 . 所以看起来你可以拖延这个(除非我已经更新了1个或更多) . :)

  • 0

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

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

    我收到了一个神秘的信息(在第一杯咖啡之前必须爱上一个很棒的双关语):

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

    我在Windows XP SP3上运行此操作(不是选择),我发现我必须按照ASP.NET Forum上的用户artsnob发布的说明操作

    • 请卸载Nuget并尝试重新安装 . 如果您无法执行此操作,请以管理员身份登录 .

    • 转到工具=>扩展管理器=>选择"Nuget Package Manager" =>取消安装

    • 通过搜索"Nuget" =>安装再次安装 .

    • 如果它不起作用,请尝试安装,我在上一篇文章中提到的1.7.x版本(这并不意味着,你必须使用以前的版本,如果它工作正常,我们可以报告这个bug,并获得最新版本的补丁) .

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

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

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

    希望能帮助到你 .

  • 263

    显然你已经创建了一个没有'Scripts'文件夹的'Empty'项目类型 . 我的建议 - 用完整的'Scripts'文件夹创建一个'Basic'项目类型 .

    关于所有开发人员 .

  • 0
    • :删除查看页面 .

    • :添加命名空间webconfig(在视图目录中)

    • :创建视图一试!

    祝好运...

  • 0

    @Styles@ScriptsSystem.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对你有用 .

  • 0

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

  • 0

    这里的关键是添加

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

    两个web.config文件 . 我的情况是我在项目和主/根web.config中都有System.Web.Optimization引用,但@Scripts仍然无法正常工作 . 您需要将命名空间引用添加到Views web.config文件以使其工作 .

    UPDATE:

    自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

    正如许多人所指出的,在完成上述步骤后,可能需要 restart of VS 才能完成这项工作 .

  • 5

    我正在使用区域,刚刚遇到这个问题,我只是将名称空间从根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" />
    
  • 2

    写吧

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

    将项目从MVC3升级到MVC4时,我遇到了类似的错误 .

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

    就我而言,我的几个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:

    <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的更多信息 .

相关问题