ASP MVC区域和角延迟加载路径

时间:2019-02-22 09:09:23

标签: angular asp.net-mvc-areas

我有这个工作,但是风格很不雅

(1)角形

这会将其输出放在文件夹中

~/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中,我有这条附加的Angular代码路由

        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/

然后工作,它将加载延迟加载的文件

我假设我需要在Angular方面做一些事情,但我不确定是什么?

NB这不是ASP MVC的核心版本

编辑,更多信息) 我在Angular.json中找到deployUrl。不幸的是,我们的网站可以通过以下任何一种方式托管:

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

href将在index.html中设置,也许deployUrl有一个等效项?

1 个答案:

答案 0 :(得分:1)

这或多或少是

的重复项

Changing Angular 5 publish url at runtime

但是特定于ASP MVC领域,所以我会坚持下去

我已经从Global.ascx中删除了404代码

在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 不起作用,但对我来说似乎

到目前为止,最低限度的测试是任何问题,我将其添加为评论