У нас есть существующее/устаревшее приложение MVC 5 и мы хотели бы «экспериментировать» с некоторыми AngularJS SPA в основном приложении.AngularJS с областями MVC
Чтобы сохранить это в чистоте и отдельно, мы создали новый MVC Area (приложение уже использует Areas) со следующим контроллером по умолчанию ...
namespace Acme.WebAdmin.Areas.Scheduler.Controllers
{
public class HomeController
: Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult PageOne()
{
return PartialView();
}
public ActionResult PageTwo()
{
return PartialView();
}
public ActionResult PageThree()
{
return PartialView();
}
}
}
Файл SchedulerAreasRegistration.cs выглядит следующим образом:
public class SchedulerAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Scheduler";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Scheduler_default",
"Scheduler/{controller}/{action}/{id}",
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
}
}
на/Планировщик/Home/Index View мы имеем следующий HTML:
<div ng-app="SchedulerApp" ng-controller="ManagementPageController">
<p>{{models.helloAngular}}</p>
<ul>
<li><a href="/#/PageOne">PageOne</a></li>
<li><a href="/#/PageTwo">PageTwo</a></li>
<li><a href="/#/PageThree">PageThree</a></li>
</ul>
<div ng-view></div>
</div>
Мы также добавили зависимость маршрута к AngularJS применения:
var SchedulerApp = angular.module('SchedulerApp', ['ngRoute']);
SchedulerApp.controller('ManagementPageController', ManagementPageController);
var configFunction = function ($routeProvider, $locationProvider) {
$routeProvider.
when('/PageOne', {
templateUrl: 'Home/PageOne'
})
.when('/PageTwo', {
templateUrl: 'Home/PageTwo'
})
.when('/PageThree', {
templateUrl: 'Home/PageThree'
});
$locationProvider.html5Mode(true);
}
configFunction.$inject = ['$routeProvider', '$locationProvider'];
SchedulerApp.config(configFunction);
Когда мы запускаем приложение и нажмите на навигационные ссылки (например, 'PageTwo') Я всегда возвращаюсь на домашнюю страницу стандартного веб-сайта со следующим URL-адресом http://localhost:52654/#/PageTwo.
Я не уверен, что проблема заключается в том, что AngualrJS не перехватывает ссылку, если это проблема маршрутизации MVC.
Любая помощь/совет будут оценены.
Пробуйте область в шаблонеUrl 'Scheduler/Home/PageOne'. – Jasen
Я пробовал это, но я все равно перенаправляюсь обратно на «настоящую» домашнюю страницу, например. http: // localhost: 52654/#/PageOne - почти кажется, что Angular не перехватывает запрос (я предполагаю, что это то, что он делает), поскольку он фактически просто перенаправляется на указанный href = '/ #/PageOne. Я не вижу ошибок JavaScript на странице. – Neilski
Каковы ваши правила маршрутизации MVC для уровня корня и для вашей области? – Jasen