2009-06-02 15 views
16

¿Cuál es la forma correcta de hacer referencia a Javascript en ASP.NET MVC? Usar algo como ../../Scripts/Myscript.js parece funcionar bien para las rutas que son las {controller}/{action}/{id} tradicionales, pero son más frágiles para cualquier cosa más o menos compleja que eso. De mayor preocupación es que la referencia absoluta racional (/Scripts/Myscript.js) rompe Intellisense en Visual Studio.¿Forma correcta de hacer referencia a Javascript en ASP.NET MVC?

¿Cómo lo manejas?

EDIT: Esto es obviamente una cuestión muy antigua en este punto, pero estoy editando mencionar que en MVC4, todo lo que necesita es la siguiente:

src="~/Scripts/Whatever.js" 

Eso es suficiente para que la maquinilla de afeitar de averiguar donde significa, usando la ruta raíz.

Respuesta

19

<script src="<%= Url.Content("~/Scripts/Myscript.js") %>" type="text/javascript"></script>

+3

Cómo funciona el Intellisense en VS de esta manera? –

4

también me refiero a js del mismo modo que CMerat:

<script type="text/javascript" src="<% =Url.Content("~/Scripts/jquery-1.3.2.min.js") %>"></script> 

Si necesita Intellisense para jQuery, usted puede encontrar instructions on how to set it up here. Por lo que yo sé, no puede obtener Intellisense para ningún archivo JS personalizado al que haga referencia; primero tendrá que crear el archivo Intellisense.

+0

Conozco las instrucciones de Scott, pero lo que obtengo de estas respuestas es que no hay forma de hacer una referencia correcta del script * y * hacer que Intellisense funcione para los archivos que lo soportan (como jQuery), que no sea el ScriptManager. –

+0

Eso tiene sentido ... porque el autointelésico (si quieres llamarlo así) está solo fuera de la secuencia de comandos que puede ver en la página. Como su script 'enlazó', está atrasada y por lo tanto el IDE no tiene conocimiento de su contenido en tiempo de diseño. –

1

Yo mismo uso mvccontrib htmlhelpers para esto en este momento.

This puede ser útil también.

0

he creado mis propias extensiones HtmlHelper que se parecen:

public static string MEScriptBlock(this HtmlHelper html, string path, string releasePath) 
{ 
#if DEBUG 
#else 
    if (!string.IsNullOrEmpty(releasePath)) 
     path = releasePath; 
#endif 

    return string.Format("<script type=\"text/javascript\" src=\"{0}\"></script>\r\n", 
         path); 
} 

Si IntelliSense es lo que está buscando se podía engañar a VS en el pensamiento de que un archivo JS se ha cargado ... P. ej

<% if (false) 
    { %> 
    <script src="../../Scripts/Myscript.js" type="text/javascript"></script> 
<% } %> 

HTHS, Charles

17

En el caso de cualquier otra persona encuentra esta respuesta que está utilizando MVC Razor, aquí está la sintaxis para que:

<script type="text/javascript" src="@Url.Content("/Scripts/MyScript.js")"></script> 
+7

En MVC4, todo lo que necesita es src = "~/Scripts/Myscript.js" y Razor lo resolverá. –

Cuestiones relacionadas