MVC 4 @Scripts "no existe"

201

Acabo de crear un proyecto ASP.NET MVC 4 y utilicé Visual Studio 2012 RC para crear un controlador y vistas de afeitadoras Indexy Createacciones.

Cuando llegué a ejecutar la aplicación y examiné la Createvista, se mostró el siguiente error:

Mensaje de error del compilador: CS0103: el nombre 'Scripts' no existe en el contexto actual

El problema es el siguiente código que se agregó automáticamente al final de la Vista:

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

¿Por qué no existen los scripts?

Miré la clase de página web base en Assembly System.Web.Mvc.dll, v4.0.0.0

Puedo ver las siguientes propiedades auxiliares disponibles:

  • Ajax
  • HTML
  • Url

Pero nada llamado Scripts.

¿Algunas ideas?

EDITAR:

Mi archivo Web.config se ve así (sin tocar el creado por 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>

EDITAR # 2:

La gente está blogueando sobre el uso del @Scriptsayudante:

Sin embargo, después de instalar Visual Studio 2012 RC en una nueva instalación de Windows 8, todavía no puedo usarlo @Scripts, ¡aunque Visual Studio lo agrega a la Vista generada!

Las soluciones se presentan a continuación.

No estoy seguro de cómo cerrar esto, porque al final una actualización pareció resolver el problema. Verifiqué dos veces que había realizado una instalación limpia, usando un nuevo proyecto. Pero el mismo proyecto fallido que hice funciona bien ahora después de varias actualizaciones y sin intervención obvia manual. Gracias por todos los pensamientos, pero definitivamente hubo un problema en ese momento;)

Fantástico Jamie Quemaduras
fuente
¿Ya intentas agregar en 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
He agregado la sección de Web.config, pero no he cambiado nada en ese archivo.
FantasticJamieBurns
66
Te refieres al archivo "My Views \ Web.config", no a la raíz de la aplicación web.config. En cualquier caso, es incorrecto y falta <add namespace = "System.Web.Optimization" />. ¿Instalaste VS12 Beta antes de RC? ¿Qué versión de win8?
RickAndMSFT
@RickAndMSFT Realicé una instalación limpia de Win8 desde el ISO de vista previa de lanzamiento, junto con una instalación desde el ISO 2012 de RC 2012, para asegurarme de que no era un conflicto de versiones.
FantasticJamieBurns
@RickAndMSFT Mis vistas \ Web.config se perderían las vistas en las áreas
Maslow

Respuestas:

269

La clave aquí es agregar

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

a AMBOS archivos web.config. Mi escenario era que tenía la referencia System.Web.Optimization tanto en el proyecto como en el principal / raíz web.config pero @Scripts todavía no funcionaba correctamente. Debe agregar la referencia del espacio de nombres al archivo web.config de Vistas para que funcione.

ACTUALIZAR:

Desde el lanzamiento de MVC 4 System.Web.Optimization ahora está obsoleto. Si está comenzando con una solución en blanco, deberá instalar el siguiente paquete nuget:

Install-Package Microsoft.AspNet.Web.Optimization

Aún necesitará hacer referencia a System.Web.Optimization en sus archivos web.config. Para obtener más información, vea este tema:

Cómo agregar referencias a System.Web.Optimization para la aplicación MVC-3-convert-to-4

Como muchos señalaron, podría ser necesario reiniciar VS después de los pasos anteriores para que esto funcione.

Marko
fuente
8
También es posible que deba ejecutar Install-Package Microsoft.AspNet.Web.Optimizationdesde una plantilla ASP.NET MVC4 en blanco, ya que no se incluye de manera predeterminada.
Portman
@Portman Sí, de hecho, si comenzó con una plantilla de proyecto MVC en blanco, debe instalar el paquete Microsoft.AspNet.Web.Optimization.
Marko
2
Solo necesita agregarse en web.config en la carpeta Vistas para mí.
user1534664
9
Esta es de hecho la solución. Sin embargo, necesitaba reiniciar Visual Studio para que esto sea reconocido.
Jason Eades
44
Tuve que agregar esto a mi Views / Web.config y luego reiniciar Visual Studio.
Caverman
48

@Stylesy @Scriptsson 2 nuevos ayudantes proporcionados porSystem.Web.Optimization biblioteca. Como su nombre lo indica, agrupan y minimizan archivos o recursos CSS y JavaScript, respectivamente.

Intente incluir el espacio de nombres System.Web.Optimizationya sea por @usingdirectiva o medianteweb.config

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

ACTUALIZAR

Microsoft ha movido la agrupación / minificación a un paquete separado llamado Microsoft.AspNet.Web.Optimization. Puedes descargar el ensamblaje desde nuget .

Esta publicación te será útil.

VJAI
fuente
2
Agregar System.Web.Optimization dice "CS0234: El tipo o nombre de espacio de nombres 'Optimización' no existe en el espacio de nombres 'System.Web". No hay ninguna referencia llamada System.Web.Optimization para agregar tampoco.
FantasticJamieBurns
1
El espacio de nombres System.Web.Optimization se ha vuelto obsoleto desde que esto fue respondido, intente usar Microsoft.AspNet.Web.Optimization en su lugar. Consulte esta pregunta para obtener más información: stackoverflow.com/questions/9475893/…
Jeremy Jarrell
3
Aclaración: El System.Web.Optimizationespacio de nombres NO está en desuso, System.Web.Optimization.dlles el.
Despertar
¡Gracias! Me está funcionando cuando tuve problemas con el diseño de las diferentes ÁREAS.
Desarrollador
48

Faltaba un pequeño paso de lo anterior, que encontré en otra publicación. Después de agregar

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

a sus ~/Views/web.configespacios de nombres, cierre y vuelva a abrir Visual Studio. Esto es lo que tuve que hacer para que esto funcionara.

Ben
fuente
2
Lo mismo aquí, el reinicio de VS funcionó pero antes de eso todavía mostraba el error ...?
Andreas
No fue necesario cerrar VS en mi caso, pero tuve que cerrar y volver a abrir la vista .cshtml que estaba usando
joalcego
29

Estoy usando áreas, y acabo de encontrarme con este problema, simplemente copié los espacios de nombres desde la raíz web.config a las áreas web. config y ahora funciona !!

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

Tuve el mismo problema y usé WinMerge para ayudarme a rastrear esto. Pero a medida que lo investigaba más, descubrí que Rick tiene la publicación de blog perfecta para ello.

Resumen:

  • Añadir <add namespace="System.Web.Optimization"/> a ambos archivos web.config
  • correr Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • Actualizar código de paquete
  • Actualizar archivo de diseño
  • El último paso es actualizar otras 10 bibliotecas. No lo hice y funcionó bien. Parece que puedes posponer esto (a menos que ya haya actualizado 1 o más de ellos). :)
Dan Friedman
fuente
Gracias por responder a esto Dan! (Y señalando mi blog). Su pregunta implicaba que comenzó con RC, pero creo que tienes razón. Acaba de agregar un controlador con RC a un proyecto Beta.
RickAndMSFT
Han pasado un par de semanas y ustedes dos ciertamente me han cuestionado. Ciertamente puse VS 2012 en mi tableta que nunca había tenido nada más que Metro Apps y lo vi fallar. Lo intentaré nuevamente en una VM.
FantasticJamieBurns
Esto funcionó para mí. Lea el artículo vinculado para obtener instrucciones exactas sobre lo que debe hacer.
Justin
11

Tuve el mismo problema:

La versión de System.Web.Optimization que estaba usando estaba desactualizada para MVC4 RC.

Actualicé mis paquetes usando el administrador de paquetes en VS 2010.

En este blog de MSDN , Andy habla sobre cómo actualizar su proyecto MVC 4 Beta a MVC 4 RC. Al actualizar mis paquetes, los Scripts (particularmente el de optimización web) se resolvieron por mí:

Para instalar el último paquete System.Web.Optimization, use la Consola del Administrador de paquetes (Herramientas -> Biblioteca Administrador de paquetes -> Consola del Administrador de paquetes) y ejecute el siguiente comando:

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

Utilice el archivo System.Web.Optimization incluido en el paquete en sus referencias.

Para actualizar otros paquetes: menú Herramientas -> Administrador de paquetes de biblioteca -> Administrar paquetes NuGet para la solución.

WWC
fuente
5

Cree una nueva aplicación de Internet MVC 4 RC y ejecútela. Navegue hasta Iniciar sesión que usa el mismo código

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

Lo que permite que Login.cshtml funcione es el archivo Views \ Web.config (no la versión raíz de la aplicación) que contiene

<namespaces>

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

  </namespaces>

¿Por qué su vista Crear no funciona y el Inicio de sesión sí?

RickAndMSFT
fuente
No estaba usando el inicio de sesión, que bien podría haberse roto en ese momento.
FantasticJamieBurns
5

Importar System.Web.Optimization en la parte superior de su vista de la maquinilla de afeitar de la siguiente manera:

@using System.Web.Optimization
xAditya3393
fuente
3

Me encontré con este problema, sin embargo, mientras ejecutaba el comando:

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

Recibí el mensaje críptico (tengo que amar un gran juego de palabras antes de la primera taza de café):

Paquete de instalación: el algoritmo criptográfico especificado no es compatible con esta plataforma.

Estoy ejecutando esto en Windows XP SP3 (no por elección) y lo que encontré fue que tenía que seguir las instrucciones publicadas por el usuario artsnob en el Foro ASP.NET

  • Desinstale Nuget e intente volver a instalarlo. Si no puede hacerlo, inicie sesión como administrador.
  • Vaya a Herramientas => Extension Manager => Seleccione "Nuget Package Manager" => Desinstalar
  • Instálelo nuevamente, buscando "Nuget" => Instalar.
  • Si no funcionó, intente instalar la versión 1.7.x como mencioné en la publicación anterior (no significa que tenga que usar la versión anterior, si funciona bien, podemos informar este error y obtener el parches para la última versión).

Una vez que ejecuté esto, podría ejecutar la línea de comando para actualizar la Web. Optimización.

Espero que esto le ahorre a alguien algo de investigación.

Jake1164
fuente
2

Solo escribe

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
archil
fuente
@archil Gracias por el reemplazo, será una buena solución temporal. Pero la pregunta principal era "¿Por qué no existen los scripts?"
FantasticJamieBurns
@Jamie debería existir? Quiero decir, hasta donde recuerdo, no hay ningún ayudante de Scipts por ahí. ¿Quizás estás tratando de usar algún ayudante de terceros?
archil
1
Yo mismo no agregué ese código: Visual Studio 2012 RC lo agregó cuando creó la Vista para mi Crear Acción. Creo que de alguna manera mi MVC 4 no es el correcto. Debe funcionar en algún lugar porque Scott Hanselman menciona la sintaxis defectuosa como una nueva adición a MVC 4 RC: hanselman.com/blog/…
FantasticJamieBurns
1

Actualicé de Beta a RC y enfrenté 'Scripts' no existe problema. Navegó por toda la web y la solución final es lo que dijo N40JPJ más otro trabajo:

Copie lo siguiente en 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>

y lo siguiente dentro de View \ Shared_Layout.cshtml

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

Espero eso ayude.

Mohsen Afshin
fuente
1
No es necesario usarlo a if (IsSectionDefined())menos que proporcione una elsecláusula. El hecho de que esté diciendo required: falseya permite que esa sección no se defina, y en ese caso se omitirá la sección. Entonces este es un código adicional innecesario.
ErikE
0

Aparentemente ha creado un tipo de proyecto 'Vacío' sin la carpeta 'Scripts'. Mi consejo: cree un tipo de proyecto 'Básico' con la carpeta completa 'Scripts'.

Con respecto a todos los desarrolladores.

Kammer
fuente
0

simplemente elimine / oculte el código de crear y editar la vista de la maquinilla de afeitar de su controlador.

 @section Scripts {  

   @Scripts.Render("~/bundles/jqueryval")  
 }  
atik sarker
fuente
0
  1. : eliminar la página de vista.
  2. : agregar espacio de nombres webconfig (en el directorio de visualización)
  3. : crear ver una prueba!

buena suerte...

Esat
fuente
0

Uno más para el bote: pasaron años tratando de resolver el mismo problema, a pesar de que se definió en web.config para root y la raíz de Views. Resulta que lo agregué por error al elemento <system.web><pages><namespaces>y no al <system.web**.webPages.razor**><pages><namespaces>elemento.

Muy fácil de perder eso!

PoorbandTony
fuente
0

Cuando entro en una página que tiene este código:

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

Este error ocurre: Error. Se produjo un error al procesar su solicitud.

Y esta excepción se registra en mis registros:

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

He intentado todos los consejos en esta página y ninguno de ellos me resolvió. Así que busqué en mi carpeta Paquetes y noté que tengo dos versiones para 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)

Mi proyecto hacía referencia a la versión beta anterior. Solo cambié la referencia a la versión más nueva (69KB) y todo funcionó bien.

Creo que podría ayudar a alguien.

rkawano
fuente
0

Eso tiene una solución obvia. Tuve el mismo problema más tarde. No está relacionado con las referencias de ensamblaje o .... Ocurrirá en llamadas de jerarquía de vistas parciales MVC, cuando tenga estructuras de página complicadas. Por lo tanto, llamar / representar cada parte por separado en cada página (tal vez una página maestra o parcial) hará que no se vean las partes requeridas de la página, como el siguiente código:

@RenderSection("Scripts", required: false)

Eso simplemente obliga a la página a buscar y representar la sección relacionada y, en caso de falla, le muestra un mensaje de error como usted.

Por lo tanto, le sugiero que rastree sus páginas (como el rastreo del programa) desde el maestro a todos sus parciales para Detectar dependencias . Tal vez sea un trabajo terrible, pero no hay otras opciones disponibles aquí.

No es que, según mi experiencia, algunas situaciones condicionales en la programación provoquen que no se muestre el error correcto que causa el problema.

Amirhossein Mehrvarzi
fuente
0

Tuve este problema después de agregar un Área a un proyecto que no tenía ninguno. Para deshacerse de él, simplemente copié el archivo web.config con la carpeta Vistas raíz en la carpeta Vistas del área y comenzó a funcionar.

Stefano.net
fuente
0

Resuelvo este problema en MvcMusicStore agregando esta parte del código en _Layout.cshtml

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

y elimine este código de Edit.cshtml

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

Ejecute el programa inshallah trabajará con usted.

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

Para mí esto resolvió el problema, en la consola del administrador de paquetes NuGet, escriba lo siguiente:

update-package microsoft.aspnet.mvc -reinstall
Adán
fuente
0

Cuando comencé a usar MVC4 recientemente, enfrenté el problema anterior al crear un proyecto con las plantillas vacías. Pasos para solucionar el problema.

  1. Ir a TOOLS-> Library Package Manager-> Packager Manager Console pegar el siguiente comando y presionar enter Install-Package Microsoft.AspNet.Web.Optimization Nota: espere a que la instalación sea exitosa.
  2. Pase al archivo Web.Config en el nivel raíz y agregue el espacio de nombres a continuación en la sección del espacio de nombres de las páginas. añadir<namespace="System.Web.Optimization" />
  3. Vaya a Web.Config en la carpeta Vistas y siga el paso 2.
  4. Construye la solución y corre.

El paquete mencionado en el paso 1 agregará algunas bibliotecas del sistema a las referencias de la solución, como System.Web.Optimization no es una referencia predeterminada para plantillas vacías en MVC4.

Espero que esto ayude. Gracias

Radha G
fuente
0

Tuve un error muy similar al actualizar un proyecto de MVC3 a MVC4.

Mensaje de error del compilador: CS0103: el nombre [blah] no existe en el contexto actual

En mi caso, tenía números de versión obsoletos en varias de mis configuraciones web.

  1. Necesitaba actualizar el número de versión de System.Web.Mvc de "3.0.0.0" a "4.0.0.0" en cada Web.Config de mi proyecto.
  2. Necesitaba actualizar todos mis números de versión System.Web.WebPages, System.Web.Helpers y System.Web.Razor de "1.0.0.0" a "2.0.0.0" en cada Web.Config de mi proyecto.

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>

Asegúrese de revisar el Web.Configs en cada uno de sus directorios de Vistas.

Puede leer más sobre la actualización de un proyecto ASP.NET MVC 3 a ASP.NET MVC 4 .

Mac
fuente
0

Si agregó a su web.config y todavía muestra un mensaje, entonces necesita cerrar su proyecto y volver a abrirlo, ahora existirá y @ Styles.Render ("") y @ Scripts.Render () funcionarán bien.

Muhammad Shahid Khan Afridi
fuente
-1

Prueba esto:

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