Когда мы использовали стандартную платформу .net, мы могли включать файлы CSS и JS по действиям и по имени контроллера с помощью кода, подобного этому;
string scriptSource = Url.Content(string.Format("~/js/page/{0}/{1}.js", controllerName, actionName));
if (System.IO.File.Exists(Server.MapPath(scriptSource)))
{
<script type="text/javascript" src="@scriptSource"></script>
}
Мы помещали эти коды в Layout, и это работало, когда вы называете папку js таким же, как имя контроллера, а файл js совпадает с именем действия.
Некоторое время назад я обновил проект до .Net Core (2.1) и произвел внедрение зависимостей в BaseController, чтобы получить значение Server.MapPath, но я не смог добраться от представления _Layout до BaseController или codebehind, чтобы получить Server.Mappath. Если есть Пожалуйста, дайте мне знать.
В ASP.NET Core мы не используем Server.MapPath
. IHostingEnvironment
этого мы хотим использовать IHostingEnvironment
.
В файле _Layout.cshtml
вы можете попробовать:
@using Microsoft.AspNetCore.Hosting
@inject IHostingEnvironment environment
@{
string path = string.Format("js/page/{0}/{1}.js", controllerName, actionName);
}
@if (System.IO.File.Exists(System.IO.Path.Combine(environment.WebRootPath, path)))
{
<!-- file exist here... -->
}
В контроллере вы можете передать его через конструктор:
public class HomeController : Controller
{
private readonly IHostingEnvironment _environment;
public HomeController(IHostingEnvironment environment)
{
_environment = environment;
}
public IActionResult Index()
{
string path = System.IO.Path.Combine(_environment.WebRootPath, "js/page/...");
return View();
}
}
Server.MapPath
в .Net Core. Смотри сюда