Traitement des chemins de fichiers relatifs dans ASP.Net et Masterpages
-
08-07-2019 - |
Question
C’est peut-être une question douloureusement simple à laquelle on me moquera mais j’ai du mal à utiliser les chemins de fichiers dans les pages maîtres. Je pense que c’est parce que si une page d’un sous-répertoire utilise la page principale, le chemin du fichier est incorrect.
Pour résoudre ce problème, je dois obtenir le chemin du fichier à la racine, mais je n'arrive pas à le faire fonctionner.
j'ai essayé:
<script type="text/javascript" src="~/jQueryScripts/jquery.js"></script>
et
<script type="text/javascript" src="../jQueryScripts/jquery.js"></script>
Pas de chance non plus!
Avez-vous des idées sur la façon dont je peux lui dire d’obtenir le chemin du fichier à la racine? Merci:)
La solution
Je suppose que par chemin de fichier, vous voulez dire en fait url (ou uri, j’oublie lequel est partiel).
Sans le ~, le premier exemple devrait fonctionner. <script type="text/javascript" src="/jQueryScripts/jquery.js"></script>
obligerait le navigateur à demander http://www.example.com/jQueryScripts/jquery .js (où www.example.com est votre domaine).
Autres conseils
Si vous utilisez un site compatible AJAX, consultez ma réponse à Méthode préférée pour inclure une référence relative à JavaScript dans une page maître imbriquée VS 2008 .
Je pense que vous devez avoir runat=server
la balise <head>
de la MasterPage
pour que cette URL soit modifiée.
<head runat="server">
Tout d’abord, le tilde devant est un élément asp.net à utiliser dans les contrôles serveur et ne fonctionnera pas en HTML de base.
Sans entrer dans des explications détaillées, vous pouvez simplement utiliser une barre oblique (/) devant, et inclure le nom de l'application Web si ce n'est pas le site racine.
Vous pouvez également insérer du code dans votre page maître pour inclure de manière dynamique les scripts et le laisser gérer le chemin. J'aime:
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);
}
Le code ci-dessus ajoute également la version de l’assemblage. J'utilise ceci principalement pour le développement afin que mes fichiers javascript soient mis à jour chaque fois que je construis.
Vous pouvez utiliser la méthode Page.ResolveUrl pour contourner ce problème
.par exemple:
<script type="text/javascript" src="<%=Page.ResolveUrl("~/jQueryScripts/jquery.js")%>"></script>