簡體   English   中英

在ASP.NET Core 6中使用_ViewStart為每個頁面動態加載js文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM