typescript 在ASP.NET Core 6中使用_ViewStart动态加载每个页面的js文件

0x6upsns  于 2022-12-30  发布在  TypeScript
关注(0)|答案(1)|浏览(126)

我正在做一个使用ASP.NETCore6Razor页面的项目。
位于Script目录中的*.ts文件和编译器将输出放入wwwroot/js/
我的目标是为具有相同名称的页面加载这些.js文件中的每一个,例如,如果我的页面名称是index.cshtml,它应该会自动加载index.js文件。
到目前为止,我已经在_ViewStart.cshtml中完成了以下操作:

var pageName = System.IO.Path.GetFileNameWithoutExtension(Path);
var jsFile = "~/js/" + pageName + ".js";
//some how load the jsFile

但问题是,jsFile总是“_ViewStart”,我需要一些如何获得文件的名称,这是使用_ViewStart的时刻(如如果index.cshtml是加载用户和它的渲染_ViewStart,我需要得到的index.cshtml)和viewbags是真的很糟糕,他们很容易忘记和混乱的错别字,我需要一些更安全的。
我想我可以在应用程序启动时使用反射来实现同样的效果(也许在每个*.cshtml文件的底部附加<script>?),但我想这有点麻烦。
如果这个问题太长或不好,请原谅

lf3rwulv

lf3rwulv1#

可以从当前页的端点数据获取当前页的文件名。例如,在_Layout.cshtml中,可以执行以下操作:

@using Microsoft.AspNetCore.Mvc.RazorPages;
@inject IWebHostEnvironment environment
@{
    var endpoint = Context.GetEndpoint() as RouteEndpoint;
    var jsFile = endpoint?.Metadata.OfType<PageActionDescriptor>().FirstOrDefault()?.ViewEnginePath.Trim('/');
    var fileExists = jsFile is not null ? File.Exists(System.IO.Path.Combine(environment.WebRootPath, "js", jsFile + ".js")) : false;
}

然后,在您想要注入脚本的时候:

@if(fileExists)
{
    <script src="~/js/@(jsFile).js"></script>
}

相关问题