2011-11-09 18 views
5

Tengo mis archivos js dentro de las áreas y no puedo acceder a ellos. Cuando los muevo fuera de las áreas de MVC, entonces puedo acceder.¿Puedo implementar un archivo javascript dentro de las áreas MVC?

He intentado lo siguiente:

  • nombres diferentes de archivos js - no resuelve un problema
  • Comprobar para ver si existen en el servidor - que hacen
  • archivo
  • acceso directamente desde dentro Administrador de IIS en el servidor: no se abrirán y no se devolverán
  • Acceda a los mismos archivos directamente desde el administrador de IIS en el servidor, pero cuando los archivos están en el directorio de scripts - Se abren en el explorador
  • Utilizado él corrector ruta - Cuando intento acceder al archivo no es así depuración ruta abierta y en su lugar sólo dice "404"

esto funciona:

<script src="@Url.Content("~/Scripts/jquery/_Roles.js")" type="text/javascript"></script> 

esto no funciona:

<script src="@Url.Content("~/Areas/Administration/Scripts/Roles/_Roles.js")" type="text/javascript"></script> 

¿Podría haber algo diferente sobre los archivos en la carpeta Áreas que bloquea las secuencias de comandos?

+0

¿Por qué usa guiones bajos en sus nombres de archivo? – ZippyV

+0

Convención para mí. Sin embargo, probablemente cambie eso. De cualquier manera, noté que todavía tengo el mismo problema. Cuando se implementa mi aplicación no le gustan los scripts en Áreas. sin embargo, se ejecuta localmente en el servidor de desarrollo, está bien. –

+1

@SamanthaJ ¿qué representa el @ Url.Content() en el lado del cliente? Tal vez su problema radica allí. – shuniar

Respuesta

-3

¿Por qué poner las secuencias de comandos en la sección Áreas? También tengo un sitio de mvc con un área, pero aún conservo mis scripts en la carpeta Scripts.

Mi sugerencia es volver a pensar la razón por la que está organizando su contenido de esa manera y considerar mover todos los archivos .js externos a la carpeta de Scripts.

+2

Se me ocurre al menos una razón: evitar que los usuarios sin privilegios administrativos lean las secuencias de comandos del panel de administración, lo que podría darles algunas ideas sobre lo que está sucediendo allí (rutas, funcionalidad, etc.). De hecho, vine aquí en busca de información sobre el almacenamiento de scripts dentro de un área de MVC ... –

+12

Un área es una agrupación lógica de funcionalidades, por lo tanto, problemas de implementación, ¿por qué no querrías colocar scripts específicos del área en una carpeta del Área? Me parece de sentido común –

+2

Si su arquitectura sigue el estilo SOA de usar componentes comerciales autónomos, esto tiene mucho sentido –

0

que ensaye

ResolveUrl(

en lugar de

Url.Content( 

?

Stefano

+0

Lo intentaré ahora. El código se está ejecutando en Azure, por lo que demorará 15 minutos en cargarse. Verificando los documentos no estoy seguro de que ayude como dice: Si el parámetro relativeUrl contiene una URL absoluta, la URL se devuelve sin cambios. Si el parámetro relativeUrl contiene una URL relativa, esa URL se cambia a una URL relativa que es correcta para la ruta de solicitud actual, de modo que el navegador pueda resolver la URL. –

0
<script type="text/javascript" src='<%: ResolveUrl("~/Scripts/jquery/_Roles.js") %>'> 
</script> 
1

Encontró una respuesta en another Stack Overflow question y la ajustó para las áreas.

archivo

Modificar /Areas/AreaName/Views/web.config para habilitar el servidor web para servir JS y CSS archivos:

<system.web> 
    <httpHandlers> 
     <add path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
    </httpHandlers> 
    <!-- other content here --> 
</system.web> 

<system.webServer> 
    <handlers> 
     <remove name="BlockViewHandler"/> 
     <add name="JavaScript" path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add name="CSS" path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" /> 
     <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
    <!-- other content here --> 
</system.webServer> 

Esto permitirá que sirve de .js y .css, y prohibirá servir de cualquier otra cosa

+0

Agregué estos cambios al web.config que reside en /Areas/AreaName/web.config y funciona también. – BrandonG

Cuestiones relacionadas