ASP MVC Области и Угловые Ленивые Загрузочные пути - PullRequest
0 голосов
/ 22 февраля 2019

У меня это работает, но не элегантно

(1) Angular

Это выводит его в папку

~/Areas/AreaName/Views/ControllerName/ClientApp/(all angular files here)

У него есть пути, такие как

<button class="k-button" routerLink="AreaName/ControllerName/LazyLoad">LazyLoad</button>&nbsp;
<button class="k-button" [routerLink]="['AreaName/ControllerName/Home']">Home</button>&nbsp;

Маршрут для отложенной загрузки выглядит следующим образом

{
    path: 'AreaName/ControllerName/LazyLoad',
    loadChildren: './lazyLoad/lazyLoad.module#LazyLoadedModule'
}

(2) MVC

В AreaRegistration у меня есть этот дополнительный маршрут для углового кода

        context.MapRoute(
            "Angular",
            "AreaName/ControllerName/{*.}",
            new { controller = "ControllerName", action = "Index", id = UrlParameter.Optional }); 

И он работает нормально, когда он пытается загрузить ленивый раздел загрузки, он смотрит по пути

/AreaName/lazyLoad-lazyLoad-module.js

Я мог бы понять, если он смотрел в '/' или 'AreaName / ControllerName' или что-топохоже, но не этот путь

Чтобы сделать эту работу, у меня есть код в Global.ascx.cs Application_Error, который обнаруживает 404 и перенаправляет его на правильный путь, то есть

~/Areas/AreaName/Views/ControllerName/ClientApp/

, который затем работает, он загружает ленивый загруженный файл

Я предполагаю, что есть что-то, что мне нужно сделать на угловой стороне, но я не уверен, что?

NB Это не основная версия ASPMVC

( Edit, больше информации ) Я нашел deployUrl в Angular.json.К сожалению, наш сайт может быть размещен любым из следующих способов:

https://OurSite/TopLevel
https://OurSite/_FurtherDown/TopLevel

href будет установлен в index.html, возможно, есть эквивалент для deployUrl?

1 Ответ

0 голосов
/ 23 февраля 2019

Это более или менее дубликат

Изменение URL-адреса публикации Angular 5 во время выполнения

, но специфично для областей ASP MVC, поэтому я оставлю его в силе

Я удалил код 404 из Global.ascx

В файле Index.cshtml я добавил это

window.DeployUrlFromMyProduct = "@(Request.ApplicationPath)/Areas/MyArea/Views/ControllerName/Ang/";

И в app.module.ts,

declare var __webpack_public_path__: any;
__webpack_public_path__ = (<any>window).DeployUrlFromKiosk;

Я знаю, что в другом вопросе говорилось, что общедоступная переменная webpack_public_path не работает, но мне кажется,

Минимальное тестирование на данный момент, любые проблемы иЯ добавлю их в качестве комментария

...