为什么在MVC4 Razor布局文件中无法识别@Scripts和@Styles命令?

时间:2013-02-02 19:14:32

标签: asp.net asp.net-mvc razor asp.net-mvc-4

以下MVC4 Razor布局文件加载在Bundle.config中创建的几个脚本和css包。

<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
  <meta charset="utf-8" />
  <title>XXX Beta</title>
  @Scripts.Render(
  "~/bundles/bundle_jquery",
  "~/bundles/bundle_modernizr",
  "~/bundles/bundle_foundation",
  "~/bundles/bundle_jhs")
  @Styles.Render(
  "~/Content/bundle_foundation",
  "~/Content/bundle_jhs")
  @RenderSection("pageHeadContent", false)
</head>
<body>
  <div id="bodyContainer">
    @Html.Partial("Partial/_header")
    <div id="contentContainer">
      <div id="mainContentContainer">
        <div id="sidebarContainer">
          @RenderSection("sidebarContent", required: true)
        </div>
        @RenderBody()
      </div>
      <div class="clearBoth">
      </div>
    </div>
    @Html.Partial("Partial/_footer")
  </div>
</body>
</html>

呈现页面时,会发生以下错误。由于某种原因,无法识别@Scripts和@Styles命令。如果我在文件中键入“@Scripts”,则Intellisense不会显示/显示命令。该项目确实引用了System.Web.Optimization,它在Bundle.config中使用。

什么可能导致@Scripts和@Styles命令无法被识别?


应用程序中的服务器错误。

编译错误

描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并相应地修改源代码。

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

来源错误:

第4行: 第5行:XXX Beta 第6行:@ Scripts.Render( 第7行:“〜/ bundles / bundle_jquery”, 第8行:“〜/ bundles / bundle_modernizr”,

源文件:c:\ Users \ username \ Documents \ Visual Studio 2010 \ Projects \ XXX \ Solution \ xxx.website \ Views \ Shared_sidebarLayout.cshtml Line:6

显示详细的编译器输出:

显示完整编译源:

版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.272

7 个答案:

答案 0 :(得分:124)

确保项目中已引用System.Web.Optimization.dll程序集,并且<add namespace="System.Web.Optimization"/>名称空间已添加到~/Views/web.config文件(不是~/web.config文件):< / p>

<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.Optimization"/>
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
</system.web.webPages.razor>

System.Web.Optimization.dll程序集包含在Microsoft.AspNet.Web.Optimization NuGet中,因此请确保它已安装在项目中(使用Internet模板在Visual Studio中创建新的ASP.NET MVC 4项目时)这个NuGet会自动添加到项目中。)

答案 1 :(得分:4)

如果您正在使用捆绑包(如相关示例中所示),您可能还需要将捆绑配置添加到您的应用中:

将Bundle Config添加到App_Start文件夹:

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
            "~/Scripts/jquery-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
            "~/Scripts/jquery.validate.js",
            "~/Scripts/jquery.validate.unobtrusive.js"
            ));

        bundles.Add(new StyleBundle("~/Content/css").Include(
            "~/Content/YourStyles.css"));

#if DEBUG

        BundleTable.EnableOptimizations = false;
#else
        BundleTable.EnableOptimizations = true;
#endif
    }
}

将以下行添加到Global.asax.cs

BundleConfig.RegisterBundles(BundleTable.Bundles);

答案 2 :(得分:3)

项目中有两个webconfig文件......它们都需要

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

答案 3 :(得分:2)

在我的情况下,我不得不将我的项目目标框架从4.5更改为4.5.1。

答案 4 :(得分:2)

如上所述here

  1. 打开文件夹:Users \(user)\ AppData \ Local \ Microsoft \ VisualStudio(version)

  2. 删除文件夹:ComponentModelCache

  3. 重新启动Visual Studio(重新创建ComponentModelCache并解决问题)

答案 5 :(得分:1)

我在这里找到了答案enter link description here

显然你需要从root web.config中添加web.optimization。

答案 6 :(得分:0)

1。。确保在项目的“引用”中重新发行了System.Web.Optimization dll。 如果没有,请使用NuGet(软件包管理器控制台)进行安装:

Install-Package Microsoft.AspNet.Web.Optimization

2。。将System.Web.Optimization命名空间添加到“视图” web.config:

<system.web.webPages.razor>   
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>        
        <add namespace="System.Web.Optimization"/>       
      </namespaces>
    </pages>
</system.web.webPages.razor>

3。。如果问题仍然存在,请尝试关闭/重新打开Visual Studio以刷新缓存。