web-dev-qa-db-fra.com

Problèmes de page maître ASP.Net et de chemin de fichier

J'essaie d'ajouter une référence de script à jQuery dans ma page maître afin que cela fonctionne pour n'importe quelle page. Il ressemble actuellement à ceci

<script type="text/javascript" src="jquery.js"></script>

Le problème est que le chemin est toujours relatif à la page aspx en cours d'exécution. Cela ne fonctionnera donc que si le fichier "jquery.js" se trouve dans le même dossier. Pour que cela fonctionne, je dois changer la ligne en:

<script type="text/javascript" src="../../jquery.js"></script>

Ceci est évidemment moins qu'idéal car cela ne fonctionnera que pour les pages situées à deux niveaux du dossier racine. Si j'essaie ce qui suit, IIS renvoie une erreur concernant un caractère inattendu.

<script runat="server" type="text/javascript" src="~/jquery.js"></script>

Des idées?

EDIT: J'ai oublié de mentionner aussi que le script DOIT être dans la balise head

La réponse principale actuelle génère un échec de chargement de "ASP.NET Ajax framework-side-framework." Lorsque je l'ajoute à ma page maître. Son javascript jeté et non le compilateur .Net. Si je déplace le ScriptManager vers la section d'en-tête où cela devrait être, je reçois une erreur de compilation indiquant que le ScriptManager doit figurer dans une balise de formulaire.

La troisième réponse génère une exception "caractères illégaux dans le chemin." Du compilateur.

EDIT 2: Lorsque j'ajoute cette ligne à mon étiquette head, l'erreur IIS apparaît.

La collection de contrôles ne peut pas être modifiée car le contrôle contient des blocs de code (c'est-à-dire <% ...%>)

Résolu: J'ai pris la réponse modifiée de la réponse ci-dessous et la mettre dans un élément asp: ContentPlaceHolder

74
TheDude

Vous pouvez utiliser un ScriptManager :

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Path="~/jquery.js" />
    </Scripts>
</asp:ScriptManager>

EDIT: Si vous absolument avez besoin de cela dans votre section <head>, vous pourriez faire quelque chose comme:

<head>
    <script type="text/javascript" 
        src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>

EDIT 2: Selon les commentaires, si vous observez que

La collection de contrôles ne peut pas être modifiée car le contrôle contient des blocs de code (c'est-à-dire <% ...%>)

vous devrez peut-être modifier ce qui précède pour utiliser la syntaxe de liaison de données:

<head>
    <script type="text/javascript" 
        src="<%# Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>
107
Cᴏʀʏ

Essayez <%# au lieu de <%= dans la page principale de la section head 

<script type="text/javascript" 
        src="<%# ResolveUrl("~/YourScriptFolder/YourJQueryOrJavascript.js") %>">
</script>

Puis dans le code derrière la page maître sous Page_Load événement

Page.Header.DataBind();

Vous êtes maintenant prêt à utiliser jQuery et JavaScript, ainsi que CSS, il vous suffit de modifier votre chemin dans ResolveUrl le fichier que vous souhaitez gérer, CSS, JavaScript et jQuery.

25
Siddiq Baig

Si vous n'allez pas nous asp: ScriptManager ou des chemins absolus, vous pouvez le faire comme ceci:

<script runat="server" type="text/javascript" 
  src='<%= Page.ResolveUrl("~/jquery.js") %>'></script>
10
Keltex

Je ne sais pas si vous avez trouvé la solution à votre problème ou non. Je faisais face au même problème et je suis devenu fou pour comprendre pourquoi j'obtiens une erreur "jQuery is undefined" sur les plugins que j'utilise. J'ai essayé toutes les solutions que je trouve sur Internet mais pas de chance du tout.

Mais tout à coup, quelque chose m'éclaire dans l'esprit qui pourrait être que les fichiers de script devraient être en ordre. J'ai donc déplacé la référence JQuery en première position et tout commence à fonctionner comme un charme.

Rappelez-vous les gars, si vous utilisez des plugins avec jQuery, assurez-vous que vous utilisez l'ordre suivant pour définir les références à ces domaines.

  1. référence à la bibliothèque jQuery
  2. référence aux autres bibliothèques de plug-ins suivantes et ainsi de suite ...

par exemple.:

  1. "script src =" js/jquery-1.3.2.min.js "type =" text/javascript "...
  2. "script src =" js/jqDnR.min.js "type =" text/javascript "...
  3. "script src =" js/jquery.jqpopup.min.js "type =" text/javascript "...
  4. "script src =" js/jquery.bgiframe.min.js "type =" text/javascript "...

Assurez-vous toujours que vous devez mettre la référence jquery en premier, puis les bibliothèques suivantes.

J'espère que cela résoudra votre problème, en particulier lorsque vous utilisez MasterPages. Il est très étrange que cela fonctionne quel que soit l'ordre utilisé lorsque vous n'utilisez pas MasterPages, mais lorsque vous l'utilisez, il nécessite en quelque sorte l'ordre approprié.

Bonne chance et bon codage,

Vincent D'Souza

3
Vincent D'Souza

Regardez Comment exécuter une racine “/” . Cela devrait résoudre tous vos problèmes concernant les chemins de fichiers .js non résolus. En gros, vous reconfigurez le serveur VS Dev pour qu'il exécute votre application en tant que localhost:port/, par opposition à la résolution normale de localhost:port/application name/, qui fonctionne de la même manière que sur IIS.

3
Rahul Sud
<script type="text/javascript" src="/full/path/to/jquery.js"></script>
0
karim79

Si cette balise de script est directement transmise au navigateur, il est peu probable que vous puissiez y remplacer la racine de votre site. Du moins pas sur le serveur. Afin que vous puissiez:

  1. Déployez le site à la racine de domainname et utilisez des chemins absolus (Solution la plus simple). 
  2. Insérez thislink avec le contrôle du serveur. 
  3. Prétraitez le code HTML résultant avant de l'envoyer au client (avec HttpResponse.Filter).
0
XOR

Vous pouvez également utiliser la balise HTML <base>: 

<base href="http://www.domain.com"></base>  

puis tous les liens dans la section d'en-tête sont relatifs à l'adresse de base: 

<script type="text/javascript" src="scripts/jquery.js"></script>

C'est souvent utile lorsque vous avez plusieurs destinations de publication, comme un serveur Web dev local, un serveur de démonstration, etc. Il suffit de remplacer cette URL de base.

0
Hrvoje Hudo

Pour le chemin absolu du fichier, quelle que soit la page, utilisez-le comme suit:

<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script> 
0
Umesh Bagalur
<body>
<script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script>
</body>
0
Yusan Susandi