Trattare con percorsi di file relativi in ASP.Net e Masterpages
-
08-07-2019 - |
Domanda
Questa potrebbe essere una domanda dolorosamente semplice per la quale sarò deriso, ma ho difficoltà a usare i percorsi dei file nelle pagine master. Credo che ciò sia dovuto al fatto che se una pagina in una sottodirectory utilizza la pagina master, il percorso del file non è corretto.
Per risolvere questo problema, devo ottenere il percorso del file dalla radice, ma non riesco a farlo funzionare.
Ho provato:
<script type="text/javascript" src="~/jQueryScripts/jquery.js"></script>
e
<script type="text/javascript" src="../jQueryScripts/jquery.js"></script>
Nessuna fortuna neanche!
Qualche idea su come posso dirlo per ottenere il percorso del file dalla radice? Grazie :)
Soluzione
Sto solo assumendo per filepath, in realtà intendi url (o uri, dimentico quale è parziale).
Senza ~, il primo esempio dovrebbe funzionare. <script type="text/javascript" src="/jQueryScripts/jquery.js"></script>
farebbe sì che il browser richiedesse http://www.example.com/jQueryScripts/jquery .js (dove www.example.com è il tuo dominio).
Altri suggerimenti
Se stai gestendo un sito abilitato per AJAX, vedi la mia risposta a Modo preferito per includere il riferimento relativo a JavaScript nella Masterpage nidificata VS 2008 .
Ritengo che sia necessario avere runat=server
nel tag <head>
del MasterPage
per far funzionare questo rebasing dell'URL.
<head runat="server">
Prima di tutto la tilde di fronte è una cosa asp.net da usare nei controlli server e non funzionerà in HTML di base.
Senza entrare in spiegazioni dettagliate, puoi semplicemente usare una barra (/) di fronte e includere il nome dell'app Web se non è il sito principale.
Oppure puoi inserire il codice nella tua pagina principale per includere in modo dinamico gli script e lasciarlo gestire il percorso. Come:
public void AddJavascript(string javascriptUrl)
{
HtmlGenericControl script = new HtmlGenericControl("script");
script.Attributes.Add("type", "text/javascript");
javascriptUrl += "?v" + Assembly.GetExecutingAssembly().GetName().Version;
script.Attributes.Add("src", ResolveUrl(javascriptUrl));
Page.Header.Controls.Add(script);
}
Il codice precedente aggiunge anche la versione dell'assembly. Lo uso principalmente per lo sviluppo in modo che i miei file javascript vengano aggiornati ogni volta che costruisco.
È possibile utilizzare il metodo Page.ResolveUrl per aggirare questo
ad esempio:
<script type="text/javascript" src="<%=Page.ResolveUrl("~/jQueryScripts/jquery.js")%>"></script>