2009-06-02 19 views
16

Jaki jest poprawny sposób odniesienia JavaScript w ASP.NET MVC? Używanie czegoś takiego jak ../../Scripts/Myscript.js wydaje się działać dobrze na trasach, które są tradycyjnymi {kontroler}/{akcja}/{id}, ale są bardziej kruche na wszystko mniej lub bardziej skomplikowane. Większym problemem jest to, że racjonalne odniesienie bezwzględne (/Scripts/Myscript.js) przerywa Intellisense w Visual Studio.Prawidłowy sposób odniesienia JavaScript w ASP.NET MVC?

Jak sobie z tym radzisz?

EDIT: Jest to oczywiście bardzo stare pytanie w tym momencie, ale jestem edycji wspomnieć, że w MVC4, wszystko czego potrzebujesz to:

src="~/Scripts/Whatever.js" 

To wystarczy dla Razor, aby dowiedzieć się, gdzie oznacza, używając ścieżki głównej.

Odpowiedz

19

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

+3

Does Intellisense praca w VS w ten sposób? –

4

ja też odwoływać JS w ten sam sposób jak CMerat:

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

Jeśli potrzebujesz Intellisense dla jQuery, można znaleźć instructions on how to set it up here. O ile wiem, nie można uzyskać Intellisense dla dowolnego niestandardowego pliku js, do którego się odwołujesz - najpierw musisz utworzyć plik IntelliSense.

+0

Jestem świadomy instrukcji Scotta, ale otrzymuję od tych odpowiedzi, że nie ma sposobu, aby poprawnie odwołać się do skryptu * i * mieć pracę Intellisense dla plików, które ją obsługują (jak jQuery), poza używaniem ScriptManagera. –

+0

To ma sens ... bo auto-intellisense (jeśli chcesz to tak nazwać) jest tylko poza skryptem, który można zobaczyć na stronie. Ponieważ twój skrypt jest "połączony", jest związany późno, więc IDE nie jest świadomy jego zawartości w czasie projektowania. –

1

Ja sam używam do tego mvccontrib htmlhelpers.

This może być również użyteczny.

0

I utworzeniu moje własne rozszerzenia HtmlHelper, które wyglądają jak:

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

Jeśli intellisense jest to, co jesteś po można oszukać VS do myślenia, że ​​plik został załadowany JS ... Np

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

HTHS, Charles

17

W przypadku ktokolwiek znajdzie tę odpowiedź, która jest przy użyciu MVC Razor, oto składnia że:

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

W MVC4, wszystko czego potrzebujesz to src = "~/Scripts/Myscript.js", a Razor to rozwiąże. –

Powiązane problemy