2

Tout en développant mon application (asp.net MVC3) localement tout allait bien à l'aide du serveur d'applications VS dev. L'application était située à localhost /. Cependant, je tente de déployer l'application sur un serveur IIS 7.5 dans un répertoire/Management et j'ai beaucoup de problèmes de routage car quelques appels dans mon application reposent sur le fait que l'application soit sur la route.routage asp.net MVC - javascript url 404 erreurs

J'ai du code javascript qui appelle mon contrôleur par un appel ajax qui ressemble à ceci:

url: "/en/Home/GetFormula/" 

Je voudrais qu'il aille à:/Management/fr/Accueil/GetFormula mais il va la racine du site et en recherchant/fr/Home/GetFormula et en retournant 404 erreurs.

Toutes les idées sur comment je peux résoudre mon routage par défaut javascript/Management/comme la racine du site?

Merci

Répondre

3

Lorsque la pseudo-URL est passé à une requête HTTP commence par une barre oblique (par exemple "/ path/to/ressource"), la pseudo-URL est "complétée" en la traitant comme si le chemin donné se trouvait sous le répertoire racine du site Web (par exemple "http://my.site/path/to/directory").

De toute évidence, vous vous attendiez à la pseudo-URL à traiter comme si le chemin donné étaient sous le répertoire racine de votre application Web. Eh bien, j'ai de mauvaises nouvelles pour vous: Le protocole HTTP ne traite pas d'une telle chose comme une «application Web». ASP.NET MVC Framework fournit la fonction Url.Content, qui prend les pseudo-URL commençant par un caractère tilde (par exemple, "~/path/to/resource") et renvoie le résultat du remplacement du caractère tilde par le Web le répertoire racine de l'application (par exemple, "http://my.site/an/application/path/to/resource", en supposant que le répertoire racine de l'application Web est "http: /my.site/an/application"). Cependant, ASP.NET MVC Framework est uniquement disponible côté serveur. Si votre JavaScript s'exécute côté client, il ne peut pas appeler Url.Content.

Mais pas tout est perdu. Le cadre ASP.NET MVC allows you to dynamically generate JavaScript code on the server and run it on the client, de la même manière allows you to dynamically generate HTML content and of course send it to the client. De cette façon, vous pouvez étendre les pseudo-URL dans les URL réelles sur le côté serveur, et déployer le code JavaScript résultant au client.

1

Pour éviter toute confusion sur l'endroit où vous essayez actuellement:

url: document.URL + "/Management/Home/GetFormula" 
+0

Ceci ne fonctionne pas si l'URL du document actuel est enterrée profondément dans la structure de répertoire (éventuellement virtuel). – pyon

+0

Essayez-vous d'obtenir l'emplacement du fichier js lui-même? –

+0

Je n'essaie pas de faire quoi que ce soit. Je ne suis pas l'affiche originale. – pyon

1

Je résolu ce problème en ajoutant un champ caché html sur ma page où, du côté du serveur, je mets l'URL correcte inférée avec la méthode Url.RouteUrl comme ceci:

<input id="MyHiddenFieldName" name="MyHiddenFieldName" type="hidden" value="@Url.RouteUrl(new { area = "MyArea", controller = "MyController", action = "MyAction" /> 

puis, sur votre javascript code que vous pourriez faire ceci:

url: $("#MyHiddenFieldName).val()