MVC 4 @Scripts "non esiste"


201

Ho appena creato un progetto ASP.NET MVC 4 e ho utilizzato Visual Studio 2012 RC per creare viste Controller e Razor Indexe Createazioni.

Quando sono arrivato a eseguire l'applicazione e ho visualizzato la Createvista, è stato visualizzato il seguente errore:

Messaggio di errore del compilatore: CS0103: Il nome "Script" non esiste nel contesto corrente

Il problema è il seguente codice che è stato aggiunto automaticamente nella parte inferiore della vista:

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

Perché gli script non esistono?

Ho esaminato la classe della pagina Web di base in Assembly System.Web.Mvc.dll, v4.0.0.0

Sono disponibili le seguenti proprietà di supporto:

  • Ajax
  • html
  • url

Ma niente di nome Script.

Qualche idea?

MODIFICARE:

Il mio file Web.config è simile al seguente (intatto da quello creato da 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:

Le persone stanno bloggando sull'uso @Scriptsdell'helper:

Tuttavia, avendo appena installato Visual Studio 2012 RC su una nuova installazione di Windows 8, non riesco ancora a utilizzare @Scriptsanche se Visual Studio lo aggiunge alla visualizzazione generata!

Le soluzioni sono presentate di seguito.

Non sono sicuro di come chiudere questo, perché alla fine un aggiornamento sembrava risolvere il problema. Ho ricontrollato di aver eseguito un'installazione pulita, utilizzando un nuovo progetto. Ma lo stesso progetto fallito che avevo realizzato ora funziona bene dopo vari aggiornamenti e nessun intervento ovvio manuale. Grazie per tutti i pensieri ma all'epoca c'era sicuramente un problema;)


provare già ad aggiungere in Web.config? <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

Ho aggiunto la sezione da Web.config, ma non ho cambiato nulla in quel file.
FantasticJamieBurns

6
Intendi il file "My Views \ Web.config" non l'app root web.config. Ad ogni modo, è errato e manca <add namespace = "System.Web.Optimization" />. Hai installato VS12 Beta prima di RC? Quale versione di Win8?
RickAndMSFT,

@RickAndMSFT Ho eseguito un'installazione Win8 pulita dall'ISO Anteprima anteprima, insieme a un'installazione dall'ISO RC VS 2012, per essere assolutamente sicuro che non si trattasse di un conflitto di versioni.
FantasticJamieBurns,

@RickAndMSFT My Views \ Web.config perderebbe qualsiasi vista nelle aree
Maslow,

Risposte:


269

La chiave qui è aggiungere

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

in ENTRAMBE i file web.config. Il mio scenario era che avevo il riferimento System.Web.Optimization sia nel progetto che nel web.config main / root ma @Scripts continuava a non funzionare correttamente. È necessario aggiungere il riferimento allo spazio dei nomi al file web.config di Views per farlo funzionare.

AGGIORNARE:

Dal rilascio di MVC 4 System.Web.Optimization è ora obsoleto. Se stai iniziando con una soluzione vuota, dovrai installare il seguente pacchetto nuget:

Install-Package Microsoft.AspNet.Web.Optimization

Sarà comunque necessario fare riferimento a System.Web.Optimization nei file web.config. Per ulteriori informazioni, consultare questo argomento:

Come aggiungere riferimento a System.Web.Optimization per l'app MVC-3-convert-to-4

Come molti hanno sottolineato, potrebbe essere necessario riavviare VS dopo i passaggi precedenti per farlo funzionare.


8
Potrebbe inoltre essere necessario eseguire Install-Package Microsoft.AspNet.Web.Optimizationda un modello ASP.NET MVC4 vuoto poiché non è incluso per impostazione predefinita.
Portman,

@Portman Sì, infatti, se hai iniziato con un modello di progetto MVC vuoto, devi installare il pacchetto Microsoft.AspNet.Web.Optimization.
Marko,

2
Deve solo essere aggiunto nel web.config nella cartella Views per me.
user1534664

9
Questa è davvero la soluzione. Tuttavia, ho dovuto riavviare Visual Studio affinché questo fosse riconosciuto.
Jason Eades,

4
Ho dovuto aggiungere questo al mio Views / Web.config e quindi riavviare Visual Studio.
Caverman,

48

@Stylese @Scriptssono 2 nuovi aiutanti forniti daSystem.Web.Optimization biblioteca. Come suggerisce il nome, raggruppano e minimizzano rispettivamente file o risorse CSS e JavaScript.

Prova a includere lo spazio dei nomi System.Web.Optimizationper @usingdirettiva o tramiteweb.config

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

AGGIORNARE

Microsoft ha spostato il raggruppamento / minificazione in un pacchetto separato chiamato Microsoft.AspNet.Web.Optimization. È possibile scaricare l'assembly da Nuget .

Questo post ti sarà utile.


2
L'aggiunta di System.Web.Optimization dice "CS0234: il nome del tipo o dello spazio dei nomi" Ottimizzazione "non esiste nello spazio dei nomi" System.Web ". Non c'è alcun riferimento chiamato System.Web.Optimization da aggiungere.
FantasticJamieBurns l'

1
Lo spazio dei nomi System.Web.Optimization è stato reso obsoleto da quando è stata data risposta, prova invece a utilizzare Microsoft.AspNet.Web.Optimization. Vedi questa domanda per maggiori informazioni: stackoverflow.com/questions/9475893/…
Jeremy Jarrell

3
Chiarimento: lo System.Web.Optimizationspazio dei nomi NON è deprecato, lo System.Web.Optimization.dllè.
Despertar,

Grazie! Funziona per me quando ho avuto problemi con il layout delle diverse AREA.
Sviluppatore

48

Mancava un piccolo passo da quanto sopra, che ho trovato su un altro post. Dopo aver aggiunto

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

nei tuoi ~/Views/web.configspazi dei nomi, chiudi e riapri Visual Studio. Questo è quello che dovevo fare per farlo funzionare.


2
Lo stesso qui, il riavvio di VS ha funzionato ma prima mostrava ancora l'errore ...?
Andreas,

Chiudere VS non era necessario nel mio caso, ma ho dovuto chiudere e riaprire la vista .cshtml che stavo usando
joalcego,

29

Sto usando le aree, e ho appena riscontrato questo problema, ho appena copiato gli spazi dei nomi dal web.config di root al web delle aree. config e ora funziona !!

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

15

Ho avuto lo stesso problema e ho usato WinMerge per aiutarmi a rintracciarlo. Ma mentre cercavo di più, ho scoperto che Rick ha il post perfetto sul blog per questo.

Sommario:

  • Aggiungi <add namespace="System.Web.Optimization"/>a entrambi i file web.config
  • Correre Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • Aggiorna codice di raggruppamento
  • Aggiorna file di layout
  • L'ultimo passo è aggiornare altre 10 librerie. Non l'ho fatto e ha funzionato bene. Quindi sembra che tu possa procrastinare questo (a meno che non ne abbia già aggiornato uno o più). :)

Grazie per aver risposto a questo Dan! (E sottolineando il mio blog). La sua domanda implicava che fosse iniziato con RC, ma penso che tu abbia ragione. Ha appena aggiunto un controller con RC a un progetto Beta.
RickAndMSFT,

Sono passate un paio di settimane ed entrambi avete sicuramente indovinato me stesso. Ho sicuramente messo VS 2012 sul mio tablet che non aveva mai avuto altro che Metro Apps e l'ho visto fallire. Proverò di nuovo in una macchina virtuale.
FantasticJamieBurns,

Questo ha funzionato per me. Leggi l'articolo collegato per le istruzioni esatte su ciò che devi fare.
Justin,

11

Ho avuto lo stesso problema:

La versione di System.Web.Optimization che stavo usando era obsoleta per MVC4 RC.

Ho aggiornato i miei pacchetti utilizzando Gestione pacchetti in VS 2010.

In questo blog MSDN , Andy parla di come aggiornare il tuo progetto MVC 4 Beta a MVC 4 RC. L'aggiornamento dei miei pacchetti mi ha permesso di risolvere gli script (in particolare quello di ottimizzazione web):

Per installare il pacchetto System.Web.Optimization più recente, utilizzare la Console Gestione pacchetti (Strumenti -> Gestione Pacchetti libreria -> Console Gestione pacchetti) ed eseguire il comando seguente:

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

Utilizzare il file System.Web.Optimization incluso nel pacchetto nei riferimenti.

Per aggiornare altri pacchetti: menu Strumenti -> Gestione pacchetti libreria -> Gestisci pacchetti NuGet per soluzione.


5

Creare una nuova applicazione Internet MVC 4 RC ed eseguirla. Passare a Accesso che utilizza lo stesso codice

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

Ciò che consente a Login.cshtml di funzionare è il file Views \ Web.config (non la versione principale dell'app)

<namespaces>

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

  </namespaces>

Perché la visualizzazione Crea non funziona e l'accesso è attivo?


Non stavo usando Login - potrebbe essere stato rotto in quel momento.
FantasticJamieBurns,

5

Importa System.Web.Optimization sulla vista del tuo rasoio come segue:

@using System.Web.Optimization

3

Ho riscontrato questo problema, tuttavia durante l'esecuzione del comando:

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

Ho ricevuto il messaggio criptico (devo amare un ottimo gioco di parole prima della prima tazza di caffè):

Pacchetto di installazione: l'algoritmo crittografico specificato non è supportato su questa piattaforma.

Sto eseguendo questo su Windows XP SP3 (non per scelta) e quello che ho scoperto è che dovevo seguire le istruzioni pubblicate dall'utente artsnob sul forum ASP.NET

  • Disinstalla Nuget e prova a reinstallarlo. Se non sei in grado di farlo, accedi come amministratore.
  • Vai su Strumenti => Extension Manager => Seleziona "Nuget Package Manager" => UnInstall
  • Installalo di nuovo, cercando "Nuget" => Installa.
  • Se non ha funzionato, prova a installare la versione 1.7.x come ho menzionato nel post precedente (Non significa che devi utilizzare la versione precedente, se funziona correttamente, possiamo segnalare questo errore e ottenere il patch per l'ultima versione).

Una volta eseguito, ho potuto eseguire la riga di comando per aggiornare Web.Optimization.

Spero che questo salvi qualcuno da scavare.


2

Scrivi e basta

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

@archil Grazie per la sostituzione: sarà una buona soluzione temporanea. Ma la domanda principale era "Perché gli script non esistono?"
FantasticJamieBurns l'

@Jamie dovrebbe esistere? Voglio dire, per quanto mi ricordo, non c'è aiutante di Scipts là fuori. Forse stai cercando di utilizzare un aiuto di terze parti?
archil,

1
Non ho aggiunto quel codice da solo - Visual Studio 2012 RC lo ha aggiunto quando ha creato la vista per la mia azione di creazione. Penso che in qualche modo il mio MVC 4 non sia quello giusto. Deve funzionare da qualche parte perché Scott Hanselman menziona la sintassi non riuscita come una nuova aggiunta a MVC 4 RC: hanselman.com/blog/…
FantasticJamieBurns

1

Ho eseguito l'aggiornamento da Beta a RC e ho riscontrato che "Script" non esiste problema. Navigato in tutto il Web e la soluzione finale è ciò che N40JPJ ha detto più un altro workaroudn:

Copia quanto segue 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>

e quanto segue in View \ Shared_Layout.cshtml

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

Spero che sia d'aiuto.


1
Non è necessario utilizzare if (IsSectionDefined())se non si fornisce una elseclausola. Il fatto che stai dicendo required: falseconsente già di non definire quella sezione e in tal caso la sezione verrà omessa. Quindi questo è un codice aggiuntivo non necessario.
ErikE,

0

Apparentemente hai creato un tipo di progetto "Vuoto" senza la cartella "Script". Il mio consiglio: creare un tipo di progetto "Basic" con la cartella "Scripts" completa.

Rispetto a tutti gli sviluppatori.


0

basta rimuovere / nascondere il codice dalla vista di creazione e modifica del rasoio del controller.

 @section Scripts {  

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

0
  1. : rimuove la pagina di visualizzazione.
  2. : aggiungi lo spazio dei nomi webconfig (nella directory di visualizzazione)
  3. : crea vista prova!

in bocca al lupo...


0

Un altro per il piatto - ha passato anni a cercare di risolvere lo stesso problema - anche se è stato definito nel web.config per root e root di Views. Si scopre che l'ho erroneamente aggiunto al <system.web><pages><namespaces>, e non<system.web**.webPages.razor**><pages><namespaces> all'elemento all'elemento.

Davvero facile perderselo!


0

Quando entro su una pagina che ha questo codice:

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

Questo errore si verifica: errore. Si è verificato un errore durante l'elaborazione della richiesta.

E questa eccezione è registrata nei miei registri:

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

Ho provato tutti i suggerimenti su questa pagina e nessuno di loro ha risolto per me. Quindi ho cercato nella mia cartella Pacchetti e ho notato che ho due versioni per 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)

Il mio progetto si riferiva alla versione beta precedente. Ho modificato solo il riferimento alla versione più recente (69 KB) e tutto ha funzionato bene.

Penso che potrebbe aiutare qualcuno.


0

Questa ha una soluzione ovvia. Ho avuto lo stesso problema più tardi. Non correlato ai riferimenti di assieme o ... Si verificherà nella chiamata gerarchica delle viste parziali MVC, quando si hanno strutture di pagina complicate. Quindi la chiamata / il rendering di ciascuna parte separatamente su ogni pagina (forse una pagina principale o parziale) farà sì che non vengano visualizzate parti della pagina richieste come il codice seguente:

@RenderSection("Scripts", required: false)

Ciò costringe semplicemente la pagina a trovare e renderizzare la sezione relativa e in caso di fallimento ti mostra un messaggio di errore come te.

Quindi ti consiglio di tracciare le tue pagine (come la traccia del programma) dal master a tutti i suoi parziali per rilevare le dipendenze . Forse sarà un lavoro terribile, ma non ci sono altre scelte disponibili qui.

Non che, secondo la mia esperienza, alcune situazioni condizionali nella programmazione provochino di non mostrarti l'errore giusto che causa il problema.


0

Ho avuto questo problema dopo aver aggiunto un'area a un progetto che non ne aveva. Per sbarazzartene basta copiare il file web.config con la cartella Views root nella cartella Views dell'area e ha iniziato a funzionare.


0

Risolvo questo problema in MvcMusicStore aggiungendo questa parte di codice in _Layout.cshtml

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

e rimuovi questo codice da Edit.cshtml

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

Esegui il programma inshallah lavorerà con te.


0

Per me questo ha risolto il problema, nella console di gestione dei pacchetti NuGet scrivere quanto segue:

update-package microsoft.aspnet.mvc -reinstall

0

Quando ho iniziato a utilizzare MVC4 di recente, ho riscontrato il problema sopra riportato durante la creazione di un progetto con i modelli vuoti. I passaggi per risolvere il problema.

  1. Vai a TOOLS-> Library Package Manager-> Packager Manager Console Incolla il comando seguente e premi Invio Install-Package Microsoft.AspNet.Web.Optimization Nota: attendi che l'installazione abbia esito positivo.
  2. Vai al file Web.Config a livello di radice e aggiungi sotto lo spazio dei nomi nella sezione dello spazio dei nomi delle pagine. Inserisci<namespace="System.Web.Optimization" />
  3. Andare a Web.Config nella cartella Views e seguire il passaggio 2.
  4. Crea la soluzione ed esegui.

Il pacchetto menzionato nel passaggio 1 aggiungerà alcune librerie di sistema nei riferimenti della soluzione come System.Web.Optimization non è un riferimento predefinito per i modelli vuoti in MVC4.

Spero che aiuti. Grazie


0

Ho avuto un errore molto simile durante l'aggiornamento di un progetto da MVC3 a MVC4.

Messaggio di errore del compilatore: CS0103: Il nome [blah] non esiste nel contesto corrente

Nel mio caso, avevo superato i numeri di versione in molti dei miei Web.Configs.

  1. Avevo bisogno di aggiornare il numero di versione di System.Web.Mvc da "3.0.0.0" a "4.0.0.0" in ogni Web.Config nel mio progetto.
  2. Avevo bisogno di aggiornare tutti i miei numeri di versione System.Web.WebPages, System.Web.Helpers e System.Web.Razor da "1.0.0.0" a "2.0.0.0" in ogni Web.Config nel mio progetto.

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>

Assicurati di rivedere i Web.Configs in ciascuna delle tue directory Views.

Puoi leggere ulteriori informazioni sull'aggiornamento di un progetto ASP.NET MVC 3 a ASP.NET MVC 4 .


0

Se hai aggiunto al tuo web.config e mostra ancora un messaggio, allora devi chiudere il tuo progetto e riaprirlo, ora esisterà e @ Styles.Render ("") e @ Scripts.Render () funzioneranno bene.


-1

Prova questo:

@section Scripts 
{
    Scripts.Render("~/bundles/jqueryval")  // <- without ampersand at the begin
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.