2010-02-15 6 views
1

J'utilise Asp.NET MVC et j'ai une énorme dépendance à JQuery tout au long de mon application (je ne sais pas si c'est important ici ou pas). J'essaye de construire un ensemble de dossiers de bibliothèque de js pour aller le long de mes vues. Le problème que je suis confronté est que j'ai besoin d'un moyen de gérer l'emplacement côté serveur de mes fichiers et liens d'action pour toutes mes images et les appels ajax.Quelle est la meilleure façon de gérer les balises côté serveur à l'intérieur d'un fichier js?

Pour l'instant, je suis coincé mettre tout de mon code de script dans chaque pages ASPX pour que je puisse utiliser les balises de script côté serveur comme celui-ci:

$("#StartDate").datepicker({ 
     changeMonth: true, 
     changeYear: true, 
     showOn: 'button', 
     buttonImage: '<%= Url.Content("~/Content") %>/Images/calendar.png', 
     buttonImageOnly: true 
    }); 

et

function fillDates(periodType, periodOffset) 
    { 
     $.ajax({ 
     url: '<%= Url.Action("GetDates", "Tracking") %>', 
     dataType: "json", 
     data: {"pt": periodType, "po": periodOffset}, 
     success: function(result){ 
      if (result.Status == "Success") 
      { 
       $("#StartDate").val(result.StartDate); 
       $("#EndDate").val(result.EndDate); 
      } 
      else 
      { 
       alert(result.Status + ": " + result.Message); 
      } 
     } 
     });   
    } 

I J'aimerais déplacer ce code dans un fichier js. Comment est-ce que je ferais ceci et pourrais toujours mapper au répertoire racine de mon application.

+0

Ne pouvez-vous pas transmettre les bits variables à vos fonctions en tant que paramètre? par exemple. fillDates (url, periodType, periodOffset); – scunliffe

+0

J'ai pensé à cela, et je voudrais éviter cela si possible. L'url n'est pas vraiment un paramètre logique à la fonction ... Cela fonctionnerait probablement bien, et merci pour votre idée. :) – Luc

Répondre

1

Bien que je ne l'aie jamais essayé, vous pouvez mapper les fichiers .js au gestionnaire ASP.NET et les traiter lorsqu'ils sont servis. La façon dont vous effectuez ce mappage dépend de la version d'IIS et vous utiliserez probablement un HTTPModule pour effectuer le traitement.

+1

pas besoin, vous pouvez le faire en toute sécurité **

3

Vous pouvez mettre l'URL de base dans votre point de vue, et font référence à partir de vos fichiers js

// site.master 
var appPath = <%=ResolveUrl("~/")%>; 

// *.js 
function dosomething() 
{ 
    var src = appPath + "content/images/test.png"; 
    var action = appPath + "controller/action"; 
} 

Note: cette méthode exige que vous fournissiez vos urls d'action manuellement au lieu d'appeler Url.Action().

+0

J'ai aussi pensé à cela, mais cela nécessiterait que je mette manuellement l'appPath dans chaque vue. Je cherche un moyen de ne faire référence qu'au fichier de script, sans code supplémentaire. Peut-être que ce n'est tout simplement pas possible? Merci pour votre idée. – Luc

+0

Savez-vous avoir un maître de vue où vous mettez vos fonctionnalités les plus basiques et la mise en page? – Joel

+0

Oui, mais les fichiers js que je veux construire auront tous ces mêmes noms et valeurs de paramètres. Je pense que je vais avoir recours à la construction de mon propre gestionnaire http (ie jspx) pour que je puisse garder mes paramètres logiques aux fonctions et avoir toujours accès à Url.Action/Url.Content/etc ... selon les besoins. Merci encore! – Luc

Questions connexes