Reputation: 14907
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
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
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
Reputation: 47597
I myself use mvccontrib htmlhelpers for this at the moment.
This can be useful too.
Upvotes: 1
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
Reputation: 4304
<script src="<%= Url.Content("~/Scripts/Myscript.js") %>" type="text/javascript"></script>
Upvotes: 19