web-dev-qa-db-fra.com

MVC 4 @Scripts "n'existe pas"

Je viens de créer un projet ASP.NET MVC 4 et d’utiliser Visual Studio 2012 RC pour créer des vues Contrôleur et Razor pour les actions Index et Create.

Lorsque je suis arrivé à exécuter l'application et à naviguer dans la vue Create, l'erreur suivante s'est affichée:

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

Le problème est le code suivant qui a été ajouté automatiquement au bas de la vue:

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

Pourquoi les scripts n'existent pas?

J'ai regardé la classe Web Page de base dans Assembly System.Web.Mvc.dll, v4.0.0.0

Je peux voir les propriétés d'aide suivantes disponibles:

  • Ajax
  • Html
  • URL

Mais rien ne s'appelle Scripts.

Des idées?

EDIT:

Mon fichier Web.config ressemble à ceci (intact de celui créé par 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:

Les gens bloguent sur l’utilisation de l’assistant @Scripts:

Comme je viens d’installer Visual Studio 2012 RC sur une nouvelle installation de Windows 8, je ne peux toujours pas utiliser @Scripts même si Visual Studio l’ajoute à la vue générée!

Les solutions sont présentées ci-dessous.

Je ne suis pas sûr de savoir comment fermer ceci, car à la fin une mise à jour semblait résoudre le problème. J'ai vérifié deux fois que j'avais effectué une nouvelle installation en utilisant un nouveau projet. Mais le même projet défaillant que j’avais réalisé fonctionne bien maintenant, après diverses mises à jour et aucune intervention manuelle manifeste. Merci pour toutes les pensées, mais il y avait définitivement un problème à l'époque;)

200

La clé ici est d'ajouter

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

vers les deux fichiers web.config. Mon scénario était que j'avais une référence System.Web.Optimization à la fois dans le projet et le web.config principal/racine, mais les scripts ne fonctionnaient toujours pas correctement. Pour que cela fonctionne, vous devez ajouter la référence à l'espace de noms dans le fichier Views web.config.

UPDATE:

Depuis la publication de MVC 4, System.Web.Optimization est maintenant obsolète. Si vous commencez avec une solution vierge, vous devez installer le package de pépites suivant:

Install-Package Microsoft.AspNet.Web.Optimization

Vous devrez toujours faire référence à System.Web.Optimization dans vos fichiers web.config. Pour plus d'informations, voir ce sujet:

Comment ajouter une référence à System.Web.Optimization pour l'application MVC-3 convertie en 4

Comme beaucoup l'ont fait remarquer, le redémarrage de VS pourrait être nécessaire après les étapes ci-dessus pour que cela fonctionne.

266
Marko

Il manque un petit pas à ce qui précède, que j'ai trouvé dans un autre post. Après avoir ajouté

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

à vos ~/Views/web.config espaces de noms, fermez et ré-ouvrez Visual Studio. C'est ce que je devais faire pour que cela fonctionne.

48
Ben

@Styles et @Scripts sont deux nouveaux assistants fournis par la bibliothèque System.Web.Optimization. Comme leur nom l'indique, ils regroupent et minifient respectivement des fichiers ou des ressources CSS et JavaScript.

Essayez d’inclure l’espace de noms System.Web.Optimization soit par la directive @using, soit par l’intermédiaire de web.config

http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinification

UPDATE

Microsoft a déplacé le regroupement/la minification vers un package séparé appelé Microsoft.AspNet.Web.Optimization. Vous pouvez télécharger l’Assemblée depuis nuget .

Ce post vous sera utile.

48
VJAI

J'utilise des zones et je viens de me heurter à ce problème. Je viens de copier les espaces de noms de la racine web.config sur la zone web. config et ça marche maintenant !!

    <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" />
30
N40JPJ

J'ai eu le même problème et j'ai utilisé WinMerge pour m'aider à localiser ce problème. Mais au fur et à mesure de mes recherches, je me suis rendu compte que Rick possédait le parfait article de blog .

Sommaire:

  • Ajouter <add namespace="System.Web.Optimization"/> aux deux fichiers web.config
  • Exécuter Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • Mise à jour du code de groupement
  • Mettre à jour le fichier de mise en page
  • La dernière étape consiste à mettre à jour 10 autres bibliothèques. Je n'ai pas et ça a bien fonctionné. On dirait que vous pouvez tergiverser celui-ci (à moins que j'en ai déjà mis à jour un ou plusieurs). :)
15
Dan Friedman

J'ai eu le même problème:

La version System.Web.Optimization que j'utilisais était obsolète pour MVC4 RC.

J'ai mis à jour mes paquets à l'aide du gestionnaire de paquets de VS 2010.

Dans ce blog MSDN , M. Andy explique comment mettre à jour votre projet MVC 4 Beta en MVC 4 RC. La mise à jour de mes paquets m'a demandé les scripts (en particulier l'optimisation Web):

Pour installer le dernier package System.Web.Optimization, utilisez Package Manager Console (Outils -> Library Package Manager -> Package Manager Console) et exécutez la commande ci-dessous:

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

Utilisez le fichier System.Web.Optimization inclus dans le package de vos références.

Pour mettre à jour d'autres packages: Menu Outils -> Gestionnaire de packages de bibliothèque -> Gérer les packages NuGet pour la solution.

11
WWC

Créez une nouvelle application Internet MVC 4 RC et exécutez-la. Accédez à la connexion qui utilise le même code

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

Ce qui permet à Login.cshtml de fonctionner, c’est que le fichier Views\Web.config (et non la version racine de l’application) contient

<namespaces>

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

  </namespaces>

Pourquoi votre vue Créer ne fonctionne-t-elle pas et que votre connexion est?

5
RickAndMSFT

Importez System.Web.Optimization en haut de votre vue rasoir comme suit:

@using System.Web.Optimization
5
xAditya3393

J'ai rencontré ce problème, cependant lors de l'exécution de la commande:

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

J'ai reçu le message crypté (je dois aimer un grand jeu de mots avant la première tasse de café):

Install-Package: l'algorithme cryptographique spécifié n'est pas pris en charge sur cette plate-forme.

J'exécute ceci sur Windows XP SP3 (non par choix) et ce que j'ai trouvé, c'est que je devais suivre les instructions postées par l'utilisateur artsnob sur le Forum ASP.NET

  • Veuillez désinstaller le Nuget et essayez de le réinstaller. Si vous ne pouvez pas faire cela, connectez-vous en tant qu'administrateur.
  • Allez dans Outils => Extension Manager => Sélectionnez "Nuget Package Manager" => Désinstaller
  • Installez-le à nouveau en recherchant "Nuget" => Installer.
  • Si cela ne fonctionne pas, essayez d’installer la version 1.7.x comme je l’ai mentionné dans le post précédent (cela ne veut pas dire que vous devez utiliser la version précédente, si cela fonctionne bien, nous pouvons signaler ce bogue et obtenir le résultat. correctifs pour la dernière version).

Une fois que je l'ai exécuté, je pouvais ensuite exécuter la ligne de commande pour mettre à jour Web.Optimization.

J'espère que cela évite à quelqu'un de creuser.

3
Jake1164

Ecrivez

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
2
archil
  1. : supprimer la page de vue.
  2. : ajouter un espace de noms webconfig (dans le répertoire de vues)
  3. : créer voir et essayer!

bonne chance...

1
Esat

Je suis passé de la version bêta à la version RC et j'ai rencontré le problème "Scripts". N40JPJ a dit avoir surfé sur le Web, et la solution finale est ce qu’a dit un autre workaroudn:

Copiez ce qui suit dans 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>

et les éléments suivants dans View\Shared_Layout.cshtml

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

J'espère que ça aide.

1
Mohsen Afshin

Quand j'entre sur une page qui a ce code:

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

Cette erreur se produit: Erreur. Une erreur s'est produite lors du traitement de votre demande.

Et cette exception est enregistrée sur mes journaux:

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

J'ai essayé tous les conseils sur cette page et aucun d'eux n'a été résolu pour moi. J'ai donc regardé dans mon dossier Packages et remarqué que j'ai deux versions pour System.Web.Optmization.dll:

  • Microsoft.AspNet.Web.Optimization.1.1.0 (v1.1.30515.0 - 68,7 Ko)
  • Microsoft.Web.Optimization.1.0.0-beta (v1.0.0.0 - 304 Ko)

Mon projet faisait référence à l'ancienne version bêta. J'ai seulement changé la référence à la version plus récente (69 Ko) et tout a bien fonctionné.

Je pense que cela pourrait aider quelqu'un.

0
rkawano

Je résous ce problème dans MvcMusicStore en ajoutant cette partie de code dans _Layout.cshtml

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

et supprimez ce code de Edit.cshtml

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

Exécutez le programme inshallah travaillera avec vous.

Un dernier point pour le pot - les années passées à essayer de résoudre le même problème - même si cela avait été défini dans le fichier web.config pour root et la racine de Views. Il s'avère que je l'avais ajouté par erreur à l'élément <system.web><pages><namespaces>, et non à <system.web**.webPages.razor**><pages><namespaces>.

Vraiment facile de rater ça!

0
PoorbandTony

J'ai eu ce problème après avoir ajouté une zone à un projet qui n'en avait pas. Pour s'en débarrasser, il suffit de copier le fichier web.config contenant le dossier Vues racine dans le dossier Vues de la zone et tout a commencé à fonctionner.

0
Stefano.net

Lorsque j'ai commencé à utiliser MVC4, j'ai récemment fait face au problème ci-dessus lors de la création d'un projet avec les modèles vides. Étapes pour résoudre le problème.

  1. Aller à TOOLS -> Library Package Manager -> Packager Manager Console Collez la commande ci-dessous et appuyez sur Entrée Install-Package Microsoft.AspNet.Web.Optimization Remarque: attendez que l'installation soit réussie.
  2. Allez au fichier Web.Config au niveau racine et ajoutez ci-dessous l'espace de noms dans la section des espaces de noms de pages. ajouter <namespace="System.Web.Optimization" />
  3. Allez à Web.Config dans le dossier Views et suivez l’étape 2.
  4. Construisez la solution et exécutez-la.

Le package mentionné à l'étape 1 ajoutera quelques bibliothèques système aux références de solution, comme System.Web.Optimization n'est pas une référence par défaut pour les modèles vides dans MVC4.

J'espère que ça aide. Je vous remercie

0
Radha G

il suffit de supprimer/masquer le code pour créer et modifier une vue rasoir de votre contrôleur.

 @section Scripts {  

   @Scripts.Render("~/bundles/jqueryval")  
 }  
0
atik sarker

Apparemment, vous avez créé un type de projet "Vide" sans dossier "Scripts". Mon conseil: créer un type de projet "Basic" avec un dossier "Scripts" complet.

En ce qui concerne tous les développeurs.

0
Kammer

Si vous avez ajouté à votre web.config et qu'il continue d'afficher un message, vous devez fermer votre projet et le rouvrir, il existe maintenant et @ Styles.Render ("") et @ Scripts.Render () fonctionnent correctement.

Cela a une solution évidente. J'ai eu le même problème plus tard. Non lié aux références d'assemblage ou ... Il se produira lors de l'appel hiérarchique de vues partielles MVC, lorsque vous avez des structures de page compliquées. Ainsi, appeler/rendre chaque partie séparément sur chaque page (peut-être une page maîtresse ou partielle) fera en sorte que les parties obligatoires de la page ne soient pas visualisées comme le code ci-dessous:

@RenderSection("Scripts", required: false)

Cela force simplement la page à trouver et à rendre la section associée et en cas d'échec vous affiche un message d'erreur comme vous.

Je vous suggère donc de suivre vos pages (comme la trace du programme) du maître vers tous ses partiels jusqu'à Détecter les dépendances. Peut-être que ce sera un travail terrible, mais aucun autre choix disponible ici.

D'après mon expérience, certaines situations conditionnelles de la programmation ne vous montrent pas l'erreur correcte.

0

Pour moi, cela a résolu le problème. Dans la console du gestionnaire de paquets NuGet, écrivez comme suit:

update-package Microsoft.aspnet.mvc -reinstall
0
Adam

J'ai eu une erreur très similaire lors de la mise à niveau d'un projet de MVC3 à MVC4.

Message d'erreur du compilateur: CS0103: Le nom [blah] n'existe pas dans le contexte actuel

Dans mon cas, j'avais des numéros de version obsolètes dans plusieurs de mes Web.Configs.

  1. J'avais besoin de mettre à jour le numéro de version System.Web.Mvc de "3.0.0.0" à "4.0.0.0" dans chaque Web.Config de mon projet.
  2. Il me fallait mettre à jour tous les numéros de version de System.Web.WebPages, System.Web.Helpers et System.Web.Razor de "1.0.0.0" à "2.0.0.0" dans chaque Web.Config de mon projet.

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>

Assurez-vous de consulter Web.Configs dans chacun de vos répertoires de vues.

Vous pouvez en savoir plus sur Mise à niveau d'un projet ASP.NET MVC 3 vers ASP.NET MVC 4 .

0
Mac