2009-10-01 8 views
0

Lorsque nous avons un fichier .js que nous référençons à partir d'une page View et que nous avons des URL dans le rappel dans un fichier JS, nous rencontrons des problèmes avec les URL non résolues lorsque site en cours d'exécution sur le serveur Web intégré VS 2008 ou sur IIS7.URL de rappel JavaScript dans les fichiers .js codebehind dans ASP.NET MVC

Par exemple, nous avons ce morceau de code dans JS fichier

pending.createCallback(pending.webRoot + "../../WidgetZoneV2/MoveWidget/" + sData, pending.widgetAdmin.moveComplete); 

Ce morceau de code fonctionne bien lorsqu'il est exécuté avec serveur web intégré (sur l'URL http://localhost:54354/WidgetZoneV2/) mais échoue sur IIS7 où nous avons une URL comme celui-ci http://localhost/virtualdir/WidgetZoneV2, parce que ce dernier cas l'URL dans la fonction de rappel se traduit en http://localhost/WidgetZoneV2 qui bien sûr n'existe pas.

Comment gérez-vous ce genre de cas? pour autant que je peux voir la seule option est de créer dynamiquement JS à l'exécution

Répondre

1

J'ai une fonction vb.net que j'utilise précisément pour ce genre de situation. à suivre convention-je utiliser le caractère racine du site relatif ASP.NET « ~ » et résoudre tous les cas de ce omble chevalier suivi d'un «/» à la racine virtuelle complète comme suit

Public Shared Function ResolveUrl(ByVal URL As String) As String 
     If URL.StartsWith("~") Then 
      Return (HttpContext.Current.Request.ApplicationPath & URL.Substring(1)).Replace("//", "/") 
     Else 
      Return URL 
     End If 
    End Function 

de sorte que votre code serait

pending.createCallback (pending.webRoot + ResolveUrl ("~/WidgetZoneV2/MoveWidget /") + sData, pending.widgetAdmin.moveComplete);

je mets en œuvre effectivement cette méthode d'extension de chaîne, mais je n'ai pas ce code sur la machine im écris ceci de

espérons que cette aide

+0

Cela semble bien mais le code .NET s'exécuterait-il à partir du fichier .JS? Coz je n'insère pas mon JavaScript directement dans la vue mais plutôt un lien vers celui-ci. – mare

+0

oh désolé mon erreur. bien ce que vous pouvez faire est d'envoyer les fichiers js à travers un gestionnaire et le vous pouvez modifier avec le code. J'ai fait un post sur mon blog expliquant cela http://www.thecodeface.co.uk/Post/View/1 –

1

Si vos fichiers js dans le dossier «/Scripts » et le nom du fichier est widget.js. Chemin d'accès au script client utilisé jQuery.

var widgetSrc = $("script[src*=/widget.js]:first").attr("src"); 
var path = widgetSrc.substring(0, widgetSrc.indexOf("/widget.js")); 
Questions connexes