Jeff Putz
Jeff Putz

Reputation: 14907

Correct way to reference Javascript in ASP.NET MVC?

What is the correct way to reference Javascript in ASP.NET MVC? Using something like ../../Scripts/Myscript.js seems to work fine for routes that are the traditional {controller}/{action}/{id}, but are more fragile for anything more or less complex than that. Of greater concern is that the rational absolute reference (/Scripts/Myscript.js) breaks Intellisense in Visual Studio.

How do you handle it?

EDIT: This is obviously a very old question at this point, but I'm editing to mention that in MVC4, all you need is this:

src="~/Scripts/Whatever.js"

That's enough for Razor to figure out where you mean, using the root path.

Upvotes: 17

Views: 23521

Answers (5)

Adrian Carr
Adrian Carr

Reputation: 3133

In case anyone else finds this answer that is using MVC Razor, here's the syntax for that:

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

Upvotes: 18

ten5peed
ten5peed

Reputation: 15890

I've created my own HtmlHelper extensions that look like:

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);
}

If intellisense is what you're after you could trick VS into thinking that a JS file has been loaded... E.g.

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

HTHs, Charles

Upvotes: 0

Arnis Lapsa
Arnis Lapsa

Reputation: 47597

I myself use mvccontrib htmlhelpers for this at the moment.

This can be useful too.

Upvotes: 1

Matt Kocaj
Matt Kocaj

Reputation: 11535

I also reference js the same way as CMerat:

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

If you need Intellisense for jquery, you can find instructions on how to set it up here. As far as i know, you cant get Intellisense for any custom js file you reference - you will need to create the Intellisense file for it first.

Upvotes: 4

Christian Merat
Christian Merat

Reputation: 4304

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

Upvotes: 19

Related Questions