Sto lavorando a una nuova applicazione ASP.NET MVC e AngularJS destinata a essere una raccolta di SPA. Sto usando il concetto di aree MVC per separare ogni singola SPA, e quindi sto usando AngularJS all'interno di ciascuna area MVC per creare la SPA.Come utilizzare il routing di ASP.NET MVC e AngularJS?
Dato che sono nuovo di AngularJS e non sono riuscito a trovare una risposta per quanto riguarda la combinazione di entrambi i percorsi MVC e AngularJS, ho pensato di pubblicare la mia domanda qui per vedere se potevo ottenere aiuto.
Ho la configurazione di routing MVC standard, che serve su ciascuna area MVC.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.AppendTrailingSlash = true;
}
Questo funziona bene e mi dà URL come:
http://servername/Application1/
http://servername/Application2/
Ora, all'interno di ogni area di applicazione, sto cercando di usare AngularJS routing, anche usando $ locationProvider.html5Mode (true); in modo che ottengo il percorso sul lato client all'interno di ciascuna area, qualcosa di simile:
http://servername/Application1/view1
http://servername/Application1/view2
http://servername/Application2/view1/view1a
http://servername/Application2/view2/view2a
http://servername/Application2/view3
Ecco il mio AngularJS di routing frammento per Application1:
app1.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
var viewBase = '/Areas/Application1/app/views/';
$routeProvider
.when('/Application1/view1', {
controller: 'View1Controller',
templateUrl: viewBase + 'view1.html'
})
.when('/Application2/view2', {
controller: 'View2Controller',
templateUrl: viewBase + 'view2.html'
})
.otherwise({ redirectTo: '/Application1/view1' });
$locationProvider.html5Mode(true);
}]);
Quindi, inizialmente, sembra funzionare (almeno il L'URL sembra corretto). Ma, quando inizio a navigare tra aree o viste all'interno di un'area, o anche se aggiorno, qualcosa viene "perso" e le cose non funzionano. L'URL sembra ancora corretto ma le viste non vengono trovate e non vengono caricate correttamente.
Qualsiasi aiuto/guida su come far funzionare il routing di ASP.NET MVC e AngularJS per fornirmi lo scenario sopra descritto?
Grazie !!!
Mi piacerebbe sapere come hai organizzato il JS angolare e il codice di visualizzazione, è tutto nella cartella degli script? E a cosa si riferiscono i tuoi
spankmaster79
Cosa succederà se chiamiamo nuovamente action da Angular Ajax come '(/ Application1/Edit/2)'. Reindirizzerà nuovamente all'indice? –
Fondamentalmente stai dando un prefisso al percorso angolare. In questo modo templateUrl fa riferimento alla corretta rotta MVC, mentre la barra url fa riferimento all'opzione di rotta URL angularjs. E tu metti il percorso MVC come descritto sopra i tuoi normali percorsi MVC, come un catch-all. Quindi, quando viene chiamato/your-prefix/your/cat/52, viene indirizzato all'indice, che carica angularjs, e quindi carica il modello usando l'uri. È semplicemente perfetto. Bella risposta. – Barry