[英]Loading js files for each page dynamically using _ViewStart in ASP.NET Core 6
我正在使用 ASP.NET Core 6 Razor 頁進行項目。
位於Script
目錄和編譯器中的*.ts
文件會將 output 放入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>
?),但我想這有點討厭。
對不起,如果這是一個很長或不好的問題
您可以從當前頁面的端點數據中獲取當前頁面的文件名。 例如,在 _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>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.