77 votes

Problèmes de page maîtresse et de chemin d'accès aux fichiers en ASP.Net

J'essaie d'ajouter une référence script à jQuery dans ma page principale afin qu'elle fonctionne pour n'importe quelle page. Actuellement, cela ressemble à ceci

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

Le problème est que le chemin d'accès 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>

Cette méthode est évidemment loin d'être idéale, car elle ne fonctionne que pour les pages situées à deux niveaux du dossier racine. Si j'essaie ce qui suit, IIS affiche 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 également que le script DOIT être dans la balise head.

La première réponse actuelle génère un " Le cadre côté client d'ASP.NET Ajax n'a pas réussi à se charger. "lorsque je l'ajoute à ma page principale. Elle est générée par le javascript et non par le compilateur .Net. Si je déplace le ScriptManager dans la section head où il devrait se trouver, j'obtiens une erreur de compilation car le ScriptManager doit se trouver à l'intérieur d'une balise de formulaire.

La troisième réponse génère un " Caractères illégaux dans le chemin. "exception du compilateur

EDIT 2 : Lorsque j'ajoute cette ligne à ma balise head, j'obtiens cette erreur de IIS.

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

SOLVÉ : J'ai pris la réponse éditée de la réponse ci-dessous et je l'ai mise à l'intérieur d'un fichier de type asp:ContentPlaceHolder élément

110voto

Cory Points 37551

Vous pourriez utiliser un ScriptManager :

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

EDIT : Si vous absolument Vous en avez besoin dans votre <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 Controls ne peut pas être modifiée car le contrôle contient des blocs de code (c'est-à-dire <% ... %>).

vous devrez peut-être modifier le texte ci-dessus pour utiliser la syntaxe de liaison de données :

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

25voto

Siddiq Baig Points 169

Essayez ce <%# au lieu de <%=

dans la page Master sous la section head

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

Ensuite, dans le code derrière la page principale, sous l'événement Page_Load.

Page.Header.DataBind();

Maintenant, vous pouvez utiliser JQuery et Javascript ainsi que CSS. Il vous suffit de modifier le chemin dans ResolveUrl et de choisir le fichier que vous voulez utiliser pour CSS, Javascript, JQuery...

10voto

Keltex Points 17151

Si vous n'avez pas l'intention d'utiliser asp:ScriptManager ou des chemins absolus, vous pouvez procéder comme suit :

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

3voto

Rahul Sud Points 21

Regardez Comment exécuter une racine "/" . Cela devrait résoudre tous vos problèmes concernant les questions non résolues. .js chemins de fichiers. En fait, vous reconfigurez le serveur VS Dev pour exécuter votre application en tant que localhost:port/ par opposition à l'ordinaire localhost:port/application name/ en faisant fonctionner la résolution de nom de la même manière que sur IIS.

3voto

Je ne sais pas si vous avez trouvé la solution à votre problème ou non. J'étais confronté au même problème et je devenais fou pour comprendre pourquoi j'obtiens l'erreur "jQuery is undefined" sur les plugins que j'utilise. J'ai essayé toutes les solutions que j'ai trouvées sur internet mais sans succès.

Mais, soudain, quelque chose m'est venu à l'esprit que peut-être les fichiers script devraient être en ordre. Donc, j'ai déplacé la référence jquery à la première position et tout a commencé à fonctionner comme un charme.

Rappelez-vous les gars, si vous utilisez des plugins avec jquery, assurez-vous d'utiliser l'ordre suivant pour définir la référence à ces fiels.

  1. référence à la bibliothèque jquery
  2. référence aux autres bibliothèques de plug-in 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"...

Veillez toujours à mettre la référence à jquery en premier et ensuite les bibliothèques suivantes.

J'espère que cela résoudra votre problème, surtout si vous utilisez des MasterPages. C'est très étrange que cela fonctionne quel que soit l'ordre utilisé lorsque vous n'utilisez pas MasterPages, mais lorsque vous le faites, cela exige en quelque sorte l'ordre approprié.

Bonne chance et bon codage,

Vincent D'Souza

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X