web-dev-qa-db-fra.com

Pourquoi les commandes @Scripts et @Styles ne sont-elles pas reconnues dans le fichier de mise en page MVC4 Razor?

Le fichier de mise en page MVC4 Razor suivant charge plusieurs ensembles de scripts et css créés dans Bundle.config.

<!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>

Lorsque la page est rendue, l'erreur suivante se produit. Pour une raison quelconque, les commandes @Scripts et @Styles ne sont pas reconnues. Si je tape "@Scripts" dans les fichiers, Intellisense n'affiche/affiche pas la commande. Le projet fait référence à System.Web.Optimization, utilisé dans Bundle.config.

Qu'est-ce qui pourrait empêcher les commandes @Scripts et @Styles d'être reconnues?


Erreur serveur dans l'application '/'.

Erreur de compilation

Description: une erreur s'est produite lors de la compilation d'une ressource requise pour traiter cette demande. Veuillez consulter les détails d'erreur spécifiques suivants et modifier votre code source de manière appropriée. 

Message d'erreur du compilateur: CS0103: Le nom "Scripts" n'existe pas dans le contexte actuel

Erreur de source:

Ligne 4: Ligne 5: XXX Beta Ligne 6: @ Scripts.Render ( Ligne 7: "~/bundles/bundle_jquery", Ligne 8: "~/bundles/bundle_modernizr",

Fichier source: c:\Utilisateurs\nom d'utilisateur\Documents\Visual Studio 2010\Projets\XXX\Solution\xxx. site Web\Views\Shared_sidebarLayout.cshtml Ligne: 6 

Afficher la sortie détaillée du compilateur:

Afficher la source de compilation complète:

Informations de version: Microsoft .NET Framework Version: 4.0.30319; Version ASP.NET: 4.0.30319.272

40
ChrisP

Assurez-vous que l'assembly System.Web.Optimization.dll a été référencé dans votre projet et que l'espace de noms <add namespace="System.Web.Optimization"/> a été ajouté à votre fichier ~/Views/web.config (et non au fichier ~/web.config):

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

L'assembly System.Web.Optimization.dll est contenu dans le Microsoft.AspNet.Web.Optimization NuGet, assurez-vous qu'il est installé dans votre projet (lorsque vous créez un nouveau projet ASP.NET MVC 4 dans Visual Studio à l'aide du modèle Internet, ce NuGet est automatiquement ajouté au projet).

123
Darin Dimitrov

Si vous utilisez des bundles (comme dans l'exemple en question), vous devrez peut-être également ajouter une configuration de bundle à votre application:

Ajoutez Bundle Config à votre dossier 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
    }
}

Ajoutez la ligne suivante à votre fichier Global.asax.cs

BundleConfig.RegisterBundles(BundleTable.Bundles);
4
DivineOps

Comme indiqué ici :

  1. ouvrez le dossier: Utilisateurs\(utilisateur)\AppData\Local\Microsoft\VisualStudio (version) 

  2. supprimer le dossier: ComponentModelCache 

  3. redémarrez Visual Studio (ComponentModelCache est recréé et le problème disparaît)

2
DeveloperDan

Il y a deux fichiers de configuration Web dans votre projet ... les deux doivent avoir

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

Dans mon cas, j'ai dû changer le cadre cible de mon projet de 4.5 à 4.5.1.

2
Bat_Programmer

1. Assurez-vous que la DLL System.Web.Optimization est redérencée dans les références du projet . Sinon installez-la avec NuGet (Package Manager Console):

Install-Package Microsoft.AspNet.Web.Optimization

2. Ajouter l'espace de noms System.Web.Optimization au "Views" 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. Si le problème persiste, essayez de fermer/d'ouvrir à nouveau Visual Studio pour actualiser le cache.

0
Davood R.

J'ai trouvé la réponse ici entrez la description du lien ici

apparemment, vous devez ajouter le fichier web.optimization à partir de votre racine web.config.

0
PinoyDev