MVC 4 @Scripts "existiert nicht"

201

Ich habe gerade ein ASP.NET MVC 4-Projekt erstellt und Visual Studio 2012 RC verwendet, um einen Controller und Rasiermesseransichten für Indexund CreateAktionen zu erstellen .

Als ich die Anwendung ausführte und zur CreateAnsicht navigierte, wurde der folgende Fehler angezeigt:

Compiler-Fehlermeldung: CS0103: Der Name 'Scripts' ist im aktuellen Kontext nicht vorhanden

Das Problem ist der folgende Code, der automatisch am unteren Rand der Ansicht hinzugefügt wurde:

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

Warum gibt es keine Skripte?

Ich habe mir die Basis-Webseitenklasse in Assembly System.Web.Mvc.dll, v4.0.0.0 angesehen

Ich kann die folgenden verfügbaren Hilfseigenschaften sehen:

  • Ajax
  • Html
  • Url

Aber nichts namens Skripte.

Irgendwelche Ideen?

BEARBEITEN:

Meine Web.config-Datei sieht folgendermaßen aus (unberührt von der von Visual Studio erstellten):

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

Die Leute bloggen über die Verwendung des @ScriptsHelfers:

Nachdem ich Visual Studio 2012 RC gerade auf einer neuen Windows 8-Installation installiert habe, kann ich es immer noch nicht verwenden @Scripts, obwohl Visual Studio es der generierten Ansicht hinzufügt!

Die Lösungen werden unten vorgestellt.

Ich bin nicht sicher, wie ich das schließen soll, da am Ende ein Update das Problem zu lösen schien. Ich habe doppelt überprüft, ob ich eine Neuinstallation mit einem neuen Projekt durchgeführt habe. Aber das gleiche fehlgeschlagene Projekt, das ich gemacht hatte, funktioniert jetzt nach verschiedenen Updates und ohne manuelle offensichtliche Intervention einwandfrei. Danke für all die Gedanken, aber es gab definitiv ein Problem zu der Zeit;)

FantasticJamieBurns
quelle
Versuchen Sie bereits, in Web.config hinzuzufügen? <system.web.webPages.razor> <pages pageBaseType=""> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> etc... </pages>
Zach Dev
Ich habe den Abschnitt aus Web.config hinzugefügt, aber in dieser Datei nichts geändert.
FantasticJamieBurns
6
Sie meinen "Meine Ansichten \ Web.config" -Datei, nicht das App-Stammverzeichnis web.config. Auf jeden Fall ist es falsch und es fehlt <add namespace = "System.Web.Optimization" />. Haben Sie VS12 Beta vor RC installiert? Welche Win8-Version?
RickAndMSFT
@RickAndMSFT Ich habe eine saubere Win8-Installation von der Release Preview ISO zusammen mit einer Installation von der VS 2012 RC ISO durchgeführt, um absolut sicherzugehen, dass es sich nicht um einen Versionskonflikt handelt.
FantasticJamieBurns
@ RickAndMSFT My Views \ Web.config würde alle Ansichten in Bereichen
Maslow

Antworten:

268

Der Schlüssel hier ist hinzuzufügen

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

zu BEIDEN web.config-Dateien. Mein Szenario war, dass ich sowohl im Projekt als auch in der main / root web.config eine System.Web.Optimization-Referenz hatte, aber @Scripts funktionierte immer noch nicht richtig. Sie müssen den Namespace-Verweis zur Datei "views web.config" hinzufügen, damit dies funktioniert.

AKTUALISIEREN:

Seit der Veröffentlichung von MVC 4 ist System.Web.Optimization veraltet. Wenn Sie mit einer leeren Lösung beginnen, müssen Sie das folgende Nuget-Paket installieren:

Install-Package Microsoft.AspNet.Web.Optimization

Sie müssen in Ihren web.config-Dateien weiterhin auf System.Web.Optimization verweisen. Weitere Informationen finden Sie in diesem Thema:

So fügen Sie einen Verweis auf System.Web.Optimization für die MVC-3-konvertierte in 4-App hinzu

Wie viele betonten, könnte nach den obigen Schritten ein Neustart von VS erforderlich sein, damit dies funktioniert.

Marko
quelle
8
Möglicherweise müssen Sie auch Install-Package Microsoft.AspNet.Web.Optimizationeine leere ASP.NET MVC4-Vorlage ausführen, da diese standardmäßig nicht enthalten ist.
Portman
@Portman Ja, wenn Sie mit einer leeren MVC-Projektvorlage begonnen haben, müssen Sie das Microsoft.AspNet.Web.Optimization-Paket installieren.
Marko
2
Es muss nur in der Datei web.config im Ordner Ansichten für mich hinzugefügt werden.
user1534664
9
Dies ist in der Tat die Lösung. Ich musste jedoch Visual Studio neu starten, damit dies erkannt wurde.
Jason Eades
4
Ich musste dies zu meiner Views / Web.config hinzufügen und dann Visual Studio neu starten.
Caverman
48

@Stylesund @Scriptssind 2 neue Helfer von der System.Web.OptimizationBibliothek zur Verfügung gestellt. Wie der Name schon sagt, bündeln und minimieren sie CSS- bzw. JavaScript-Dateien bzw. -Ressourcen.

Versuchen Sie, den Namespace System.Web.Optimizationentweder per @usingDirektive oder durch einzuschließenweb.config

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

AKTUALISIEREN

Microsoft hat die Bündelung / Minimierung in ein separates Paket namens verschoben Microsoft.AspNet.Web.Optimization. Sie können die Baugruppe von nuget herunterladen .

Dieser Beitrag wird Ihnen nützlich sein.

VJAI
quelle
2
Beim Hinzufügen von System.Web.Optimization heißt es "CS0234: Der Typ- oder Namespace-Name 'Optimierung' ist im Namespace 'System.Web nicht vorhanden". Es gibt auch keine Referenz namens System.Web.Optimization, die hinzugefügt werden könnte.
FantasticJamieBurns
1
Der System.Web.Optimization-Namespace ist seit Beantwortung veraltet. Versuchen Sie stattdessen, Microsoft.AspNet.Web.Optimization zu verwenden. Siehe diese Frage für weitere Informationen: stackoverflow.com/questions/9475893/…
Jeremy Jarrell
3
Klarstellung: Der System.Web.OptimizationNamespace ist NICHT veraltet, das System.Web.Optimization.dllist.
Despertar
Vielen Dank! Es funktioniert für mich, wenn ich Probleme mit dem Layout der verschiedenen BEREICHE habe.
Entwickler
48

Es fehlte ein kleiner Schritt oben, den ich in einem anderen Beitrag gefunden habe. Nach dem Hinzufügen

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

Schließen Sie Visual Studio in Ihren ~/Views/web.configNamespaces und öffnen Sie es erneut. Das musste ich tun, damit das funktioniert.

Ben
quelle
2
Gleich hier hat der Neustart von VS funktioniert, aber vorher wurde immer noch der Fehler angezeigt ...?
Andreas
Das Schließen von VS war in meinem Fall nicht erforderlich, aber ich musste die von mir verwendete
.cshtml-
29

Ich verwende Bereiche und bin gerade auf dieses Problem gestoßen. Ich habe gerade die Namespaces aus der root-Datei web.config in das Bereich-Web kopiert. config und es funktioniert jetzt !!

    <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" />
N40JPJ
quelle
15

Ich hatte das gleiche Problem und habe WinMerge verwendet, um dies aufzuspüren. Aber als ich mehr darüber recherchierte, stellte ich fest, dass Rick den perfekten Blog-Beitrag dafür hat.

Zusammenfassung:

  • In <add namespace="System.Web.Optimization"/>beiden web.config - Dateien
  • Lauf Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • Bundle-Code aktualisieren
  • Layoutdatei aktualisieren
  • Der letzte Schritt besteht darin, 10 andere Bibliotheken zu aktualisieren. Ich habe es nicht getan und es hat gut funktioniert. Sieht also so aus, als könnten Sie diesen aufschieben (es sei denn, ich habe bereits einen oder mehrere davon aktualisiert). :) :)
Dan Friedman
quelle
Danke, dass du auf diesen Dan geantwortet hast! (Und auf meinen Blog hinweisen). Seine Frage implizierte, dass er mit RC angefangen hatte, aber ich denke, Sie haben Recht. Er hat gerade einem Beta-Projekt einen Controller mit RC hinzugefügt.
RickAndMSFT
Es ist ein paar Wochen her und Sie beide haben mich sicher dazu gebracht, mich selbst zu erraten. Ich habe VS 2012 auf mein Tablet gestellt, auf dem es nie etwas anderes als Metro Apps gab, und festgestellt, dass es fehlgeschlagen ist. Ich werde es in einer VM erneut versuchen.
FantasticJamieBurns
Das hat bei mir funktioniert. Lesen Sie den verlinkten Artikel, um genaue Anweisungen zu erhalten, was Sie tun müssen.
Justin
11

Ich hatte das gleiche Problem:

Die von mir verwendete System.Web.Optimization-Version war für MVC4 RC veraltet.

Ich habe meine Pakete mit dem Paketmanager in VS 2010 aktualisiert.

In diesem MSDN-Blog spricht Herr Andy darüber, wie Sie Ihr MVC 4 Beta-Projekt auf MVC 4 RC aktualisieren können. Durch das Aktualisieren meiner Pakete konnten die Skripte (insbesondere das Skript zur Weboptimierung) für mich aufgelöst werden:

Verwenden Sie zum Installieren des neuesten System.Web.Optimization-Pakets die Package Manager-Konsole (Tools -> Library Package Manager -> Package Manager-Konsole) und führen Sie den folgenden Befehl aus:

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

Verwenden Sie die im Paket enthaltene Datei System.Web.Optimization in Ihren Referenzen.

So aktualisieren Sie andere Pakete: Menü Extras -> Bibliothekspaket-Manager -> NuGet-Pakete für Lösung verwalten.

WWC
quelle
5

Erstellen Sie eine neue MVC 4 RC-Internetanwendung und führen Sie sie aus. Navigieren Sie zu Login, das denselben Code verwendet

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

Login.cshtml funktioniert in der Datei Views \ Web.config (nicht in der App-Stammversion)

<namespaces>

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

  </namespaces>

Warum funktioniert Ihre Ansicht "Erstellen" nicht und die Anmeldung funktioniert?

RickAndMSFT
quelle
Ich habe Login nicht verwendet - das war damals vielleicht kaputt.
FantasticJamieBurns
5

Importieren Sie System.Web.Optimization wie folgt über Ihre Rasiereransicht:

@using System.Web.Optimization
xAditya3393
quelle
3

Ich bin jedoch auf dieses Problem gestoßen, als ich den Befehl ausgeführt habe:

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

Ich habe die kryptische Nachricht erhalten (ich muss ein tolles Wortspiel vor der ersten Tasse Kaffee lieben):

Install-Package: Der angegebene kryptografische Algorithmus wird auf dieser Plattform nicht unterstützt.

Ich führe dies unter Windows XP SP3 aus (nicht nach Wahl) und stellte fest, dass ich den Anweisungen des Benutzers artsnob im ASP.NET-Forum folgen musste

  • Bitte deinstallieren Sie das Nuget und versuchen Sie es erneut zu installieren. Wenn Sie dies nicht tun können, melden Sie sich als Administrator an.
  • Gehen Sie zu Tools => Extension Manager => Wählen Sie "Nuget Package Manager" => Deinstallieren
  • Installieren Sie es erneut, indem Sie nach "Nuget" suchen => Installieren.
  • Wenn es nicht funktioniert hat, versuchen Sie bitte, die Version 1.7.x zu installieren, wie ich im vorherigen Beitrag erwähnt habe Patches für die neueste Version).

Sobald ich dies ausgeführt habe, konnte ich die Befehlszeile ausführen, um die Web.Optimization zu aktualisieren.

Hoffe, das erspart jemandem das Graben.

Jake1164
quelle
2

Einfach schreiben

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
Archil
quelle
@archil Danke für den Ersatz - das wird eine gute vorübergehende Lösung sein. Die Hauptfrage war jedoch: "Warum gibt es keine Skripte?"
FantasticJamieBurns
@ Jamie sollte es existieren? Ich meine, soweit ich mich erinnere, gibt es keinen Scipts-Helfer da draußen. Vielleicht versuchen Sie, einen Helfer eines Drittanbieters zu verwenden?
Archil
1
Ich habe diesen Code nicht selbst hinzugefügt - Visual Studio 2012 RC hat ihn hinzugefügt, als die Ansicht für meine Erstellungsaktion erstellt wurde. Ich denke irgendwie ist meine MVC 4 nicht die richtige. Es muss irgendwo funktionieren, weil Scott Hanselman die fehlerhafte
FantasticJamieBurns
1

Ich habe ein Upgrade von Beta auf RC durchgeführt und es gab kein Problem mit "Skripten". Überall im Internet gesurft und die endgültige Lösung ist das, was N40JPJ sagte, plus eine weitere Workaroudn:

Kopieren Sie Folgendes in 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>

und das Folgende in View \ Shared_Layout.cshtml

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

Ich hoffe es hilft.

Mohsen Afshin
quelle
1
Die Verwendung ist nur erforderlich, if (IsSectionDefined())wenn Sie eine elseKlausel angeben. Die Tatsache, dass Sie required: falsebereits sagen, ermöglicht, dass dieser Abschnitt nicht definiert wird, und in diesem Fall wird der Abschnitt weggelassen. Dies ist also kein unnötiger zusätzlicher Code.
ErikE
0

Anscheinend haben Sie einen Projekttyp "Leer" ohne Ordner "Skripte" erstellt. Mein Rat: Erstellen Sie einen Projekttyp "Basic" mit dem vollständigen Ordner "Scripts".

In Bezug auf alle Entwickler.

Kammer
quelle
0

Entfernen / verbergen Sie einfach den Code aus der Rasieransicht Ihres Controllers zum Erstellen und Bearbeiten.

 @section Scripts {  

   @Scripts.Render("~/bundles/jqueryval")  
 }  
Atik Sarker
quelle
0
  1. : Ansichtsseite entfernen.
  2. : Namespace webconfig hinzufügen (im Ansichtsverzeichnis)
  3. : Ansicht erstellen und ausprobieren!

Viel Glück...

Esat
quelle
0

Eine weitere für den Pot - er hat ewig versucht, das gleiche Problem zu lösen - obwohl sie in der web.config für root und root von Views definiert wurde. Es stellte sich heraus, dass ich es fälschlicherweise dem Element <system.web><pages><namespaces>und nicht dem <system.web**.webPages.razor**><pages><namespaces>Element hinzugefügt hatte .

Wirklich leicht zu übersehen!

PoorbandTony
quelle
0

Wenn ich eine Seite betrete, die diesen Code enthält:

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

Dieser Fehler tritt auf: Fehler. Während Ihrer Anfrage ist ein Fehler aufgetreten.

Und diese Ausnahme wird in meinen Protokollen aufgezeichnet:

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

Ich habe alle Tipps auf dieser Seite ausprobiert und keiner von ihnen wurde für mich gelöst. Also habe ich in meinem Paketordner nachgesehen und festgestellt, dass ich zwei Versionen für System.Web.Optmization.dll habe:

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

Mein Projekt bezog sich auf die ältere Beta-Version. Ich habe nur den Verweis auf die neuere Version (69 KB) geändert und alles hat gut funktioniert.

Ich denke, es könnte jemandem helfen.

rkawano
quelle
0

Das hat eine offensichtliche Lösung. Ich hatte später das gleiche Problem. Nicht im Zusammenhang mit Baugruppenreferenzen oder ... Es tritt beim Aufrufen von MVC-Teilansichten in Hierarchien auf, wenn Sie komplizierte Seitenstrukturen haben. Wenn Sie also jeden Teil auf jeder Seite einzeln aufrufen / rendern (möglicherweise eine Masterseite oder einen Teil davon), werden die erforderlichen Teile der Seite wie der folgende Code nicht angezeigt:

@RenderSection("Scripts", required: false)

Dadurch wird die Seite einfach gezwungen, einen verwandten Abschnitt zu finden und zu rendern, und im Fehlerfall wird eine Fehlermeldung wie Sie angezeigt.

Daher empfehle ich Ihnen, Ihre Seiten (wie die Programmablaufverfolgung) vom Master bis zu allen Partials zu verfolgen, um Abhängigkeiten zu erkennen . Vielleicht ist es eine schreckliche Arbeit, aber hier gibt es keine anderen Möglichkeiten.

Nicht, dass meiner Erfahrung nach einige bedingte Situationen in der Programmierung dazu führen, dass nicht der richtige Fehler angezeigt wird, was das Problem verursacht.

Amirhossein Mehrvarzi
quelle
0

Ich hatte dieses Problem, nachdem ich einem Projekt einen Bereich hinzugefügt hatte, der keinen hatte. Um es loszuwerden, kopierte einfach die Datei web.config mit dem Stammordner Views in den Ordner Views des Bereichs und es begann zu funktionieren.

Stefano.net
quelle
0

Ich löse dieses Problem in MvcMusicStore, indem ich diesen Teil des Codes in _Layout.cshtml hinzufüge

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

und entfernen Sie diesen Code aus Edit.cshtml

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

Führen Sie das Programm aus, inshallah wird mit Ihnen zusammenarbeiten.

احمد الباكري
quelle
0

Für mich löste dies das Problem, in der NuGet-Paketmanager-Konsole schreiben Sie Folgendes:

update-package microsoft.aspnet.mvc -reinstall
Adam
quelle
0

Als ich kürzlich anfing, MVC4 zu verwenden, war ich beim Erstellen eines Projekts mit den leeren Vorlagen mit dem oben genannten Problem konfrontiert. Schritte zur Behebung des Problems.

  1. Springen Sie zu TOOLS-> Library Package Manager-> Packager Manager Console Fügen Sie den folgenden Befehl ein und drücken Sie die Eingabetaste. Install-Package Microsoft.AspNet.Web.Optimization Hinweis: Warten Sie auf die erfolgreiche Installation.
  2. Gehen Sie zur Web.Config-Datei im Stammverzeichnis und fügen Sie den folgenden Namespace im Abschnitt "Namespace" hinzu. hinzufügen<namespace="System.Web.Optimization" />
  3. Gehen Sie im Ordner "Ansichten" zu "Web.Config" und befolgen Sie Schritt 2.
  4. Erstellen Sie die Lösung und führen Sie sie aus.

Das in Schritt 1 erwähnte Paket fügt den Lösungsreferenzen wie System.Web.Optimization nur wenige Systembibliotheken hinzu. Dies ist keine Standardreferenz für leere Vorlagen in MVC4.

Ich hoffe das hilft. Danke dir

Radha G.
quelle
0

Ich hatte einen sehr ähnlichen Fehler beim Upgrade eines Projekts von MVC3 auf MVC4.

Compiler-Fehlermeldung: CS0103: Der Name [blah] ist im aktuellen Kontext nicht vorhanden

In meinem Fall hatte ich in mehreren meiner Web.Configs veraltete Versionsnummern.

  1. Ich musste die Versionsnummer von System.Web.Mvc in jeder Web.Config in meinem Projekt von "3.0.0.0" auf "4.0.0.0" aktualisieren.
  2. Ich musste alle Versionsnummern von System.Web.WebPages, System.Web.Helpers und System.Web.Razor in jeder Web.Config in meinem Projekt von "1.0.0.0" auf "2.0.0.0" aktualisieren.

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>

Überprüfen Sie unbedingt die Web.Configs in jedem Ihrer Views-Verzeichnisse.

Weitere Informationen zum Aktualisieren eines ASP.NET MVC 3-Projekts auf ASP.NET MVC 4 finden Sie hier .

Mac
quelle
0

Wenn Sie Ihrer web.config hinzugefügt haben und die Meldung weiterhin angezeigt wird, müssen Sie Ihr Projekt schließen und erneut öffnen. Jetzt ist es vorhanden und @ Styles.Render ("") und @ Scripts.Render () funktionieren einwandfrei.

Muhammad Shahid Khan Afridi
quelle
-1

Versuche dies:

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