2009-06-04 16 views
6

Ho creato un progetto ASP.net MVC predefinito. Nella pagina master che ho il seguente nella parte superioreCome includere file js in asp.net MVC e avere un percorso valido su tutte le route

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
</head> 

ho quindi bisogno di aggiungere un file javascript e aggiunto la riga come segue trascinando il file dalla soluzione esploratore alla pagina:

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
</head> 

Quando accedo un sito e Esaminando il codice HTML dal browser vedo questo:

<head><title> 

    Index 

</title><link href="Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
</head> 

il file CSS percorso relativo è stato fissato, ma il file JS non. Il sito verrà distribuito in una cartella diversa sul server rispetto alla radice che ottengo sulla mia casella di sviluppo.

Esiste un modo corretto per farlo?

risposta

16

utilizzare l'URL Helper:

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

Speranza che aiuta

+0

Questo risolve il problema con l'installazione del sito in una sottodirectory poiché ~ viene sostituito con il percorso alla radice del sito. Ma il problema è che quando arrivo alla radice il file js si trova nella cartella Scripts sotto la root e non ... /../Scripts rimane. Poiché MVC si dirigerà verso diverse sottocartelle, lo script non è sempre disponibile da tutte le rotte. Ti ho dato +1 poiché almeno ora ho un modo per codificare i percorsi relativi alla radice. Ma aspetterò di vedere se qualcuno può spiegare perché funziona per il CSS fuori dalla scatola e non per JS. – jvanderh

+0

Penso che il problema non sia css vs Javascript ma che tu abbia semplicemente il tuo css all'interno della tua cartella conetne e non lo script – Lewis

7

È possibile creare un metodo di supporto che fa qualcosa di simile:

<%= Helper.IncludeJavascriptFile("Menu.js") %> 

e poi in quella di supporto fare qualcosa Mi piace:

public string IncludeJavascriptFile(string fileName){ 
    return Url.Content("<root>/Javascript/Files/" + fileName); 
} 

Quindi puoi chiamare quel metodo di supporto dalla tua vista. Se decidi di cambiare la posizione dei file, è solo in una posizione che ti devi preoccupare. Se cambi il nome dei file, questo è un problema diverso di per sé.

+1

+1 per manutenibilità. – jvanderh

Problemi correlati