Percorsi nelle pagine master
-
09-06-2019 - |
Domanda
Ho iniziato a lavorare un po ' con le pagine master per un ASP.net mvc sito e ho incontrato una domanda.Quando c'è il link in un foglio di stile della pagina principale sembra quello di aggiornare il percorso del foglio correttamente.Che è il codice che ho
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
ma, guardando il sorgente una volta che la pagina viene alimentato un browser ottengo
<link href="Content/Site.css" rel="stylesheet" type="text/css" />
che è perfetto.Tuttavia lo stesso percorso di traduzione non sembra funzionare per i file di script.
<script src="../../Content/menu.js" type="text/javascript"></script>
appena esce la stessa cosa.Sembra ancora lavorare su una pagina di primo livello, ma ho il sospetto che è solo il browser/server web correggere il mio errore.C'è un modo per ottenere il src percorso globbed troppo?
Soluzione
<script src="<%= ResolveClientUrl("~/Content/menu.js") %>" type="text/javascript"></script>
Altri suggerimenti
Fare un metodo di estensione.Ecco un metodo:
public static string ResolveUrl(this HtmlHelper helper, string virtualUrl)
{
HttpContextBase ctx = helper.ViewContext.HttpContext;
string result = virtualUrl;
if (virtualUrl.StartsWith("~/"))
{
virtualUrl = virtualUrl.Remove(0, 2);
//get the site root
string siteRoot = ctx.Request.ApplicationPath;
if (!siteRoot.EndsWith("/"))
siteRoot += "/";
result = siteRoot + virtualUrl;
}
return result;
}
È quindi possibile scrivere script ref come:
<script type="text/javascript" src="<%= Html.ResolveUrl("~/Content/menu.js")%>"></script>
Utilizzare invece questo:
<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />
oppure si può utilizzare il tag di BASE in CAPO sezione della pagina.Tutti i link quindi sono relativi alla posizione entrato nella "base" del tag, e non devi usare "../../" e "~" roba.Ad eccezione dei collegamenti nei file CSS (sfondo url,ecc), dove i link sono relativi alla posizione del file css.