AngularJS routage ne fonctionne pas après le site hébergé sur IIS
Nous créons SPA technique utilisant AngularJS dans ASP.NET framework MVC,AngularJS routage entre les pages fonctionnent très bien lorsqu'il est exécuté à partir de VS2013,mais après avoir accueilli la demande dans IIS7.5 de routage ne fonctionne pas,
Script De Routage:
var appRoot = angular.module('main', ['ngRoute', 'ngGrid', 'ngResource']); //Define the main module
appRoot
.config(['$routeProvider', function ($routeProvider) {
//Setup routes to load partial templates from server. TemplateUrl is the location for the server view (Razor .cshtml view)
$routeProvider
.when('/home', { templateUrl: '/home/main', controller: 'HomeController' }) .otherwise({ redirectTo: '/home' });
}])
.controller('RootController', ['$scope', '$route', '$routeParams', '$location', function ($scope, $route, $routeParams, $location) {
$scope.$on('$routeChangeSuccess', function (e, current, previous) {
$scope.activeViewPath = $location.path();
});
}]);
Index.html:
<li class="mt" data-ng-class="{active : activeViewPath==='/home'}">
<a href='#/home'>
<i class="fa fa-dashboard"></i>
<span>Dashboard Home</span>
</a>
</li>
<div class="col-lg-9 main-chart" ng-view="">
</div>
Structure De Projet:
OriginalL'auteur Ravuthasamy | 2015-02-23
Vous devez vous connecter pour publier un commentaire.
avez-vous un JS d'erreur lorsque vous exécutez sur IIS?
êtes-vous à l'aide de faisceaux? Si oui, vérifiez si le problème se produit en raison de minification/la création de l'ensemble de l'ajout
BundleTable.EnableOptimizations = true;
dans
RegisterBundles
méthode et essayer de nouveau dans VS.Sinon, je vous suggère de courir sur IIS local (clic droit sur le projet, onglet "Web",section "Serveurs") et voir si cela fonctionne correctement.
En fonction de votre gamme, vous devriez
<base href="@Url.Content("~/")" />
dans le modèle de la tête et de se débarrasser de "#" à partir de l'url à l'aide de$locationProvider.html5Mode(true);
sur la route de configuration.Si aucun des ci-dessus sont utiles, veuillez ajouter plus de détails à votre demande.
Ont un beau jour,
Alberto
Mon plaisir @Ravuthasamy!
ce fixe mine partiellement parce que si je recharge la page ou appuyez sur la touche retour, puis-je obtenir 404 - Fichier ou répertoire introuvable. savez-vous comment résoudre ce problème ??
OriginalL'auteur Alberto
Êtes-vous le déploiement de votre solution sur un site web ou une application sur un chemin d'accès virtuel? En d'autres mots, lorsque vous déployez votre application qu'est ce qu'une url? Est-il quelque chose comme "myapp.mydomain.com" ou "domain.com/myapp"?
Si ce dernier, alors le problème est que la demande pour le modèle
{ templateUrl: '/home/main' }
ira à domain.com/home/main et de ne pas domain.com/myapp/home/main quand vous vous y attendez.Selon : Indiquant la directive templateUrl par rapport à la racine juste enlever '/' dans le modèle d'url et cela devrait fonctionner:
{ templateUrl: 'home/main' }
L'autre option est de déployer votre site web à son propre sous-domaine.
A mon sur le droit chemin, merci.
OriginalL'auteur milanio
vous devez éditer un site web.fichier de config pour faire de la réécriture et de l'indice comme ce
<base href="/myAppNameOnIIS/">
pas de nom de l'application et l'actualisation fonctionnera parfaitement en utilisant le web.fichier de configurationJe fixer à l'aide de cette
<action type="Rewrite" url="/myAppNameOnIIS/" />
pour que le HTML5 mode de travail. gardez à l'esprit que ces paramètres peuvent ne pas fonctionner sur votre serveur localhost si vous exécutez l'application à partir du dossier racineapi
URI de la requête. Comme<add input="{REQUEST_URI}" pattern="^/myAppNameOnIIS/(api)" negate="true" />
et bien sûr dans la page principale<base href='/myAppNameOnIIS/' />
OriginalL'auteur Xvegas
J'ai juste ajouté le
<base href="@Url.Content("~/")" />
à ma mise en page et tout fonctionne bien. J'ai eu des problèmes de rechargement(Actualisation ou F5) la page qui envoie la totalité de l'url du serveur avec le$locationprovider.html5Mode(true);
dans le Stateprovider, mais le problème d'actualisation résolu quand je le supprime de la stateprovider. et j'ai le site en tant qu'application dans un site web.OriginalL'auteur Hari Krishna Gaddipati