Включение программных файлов Css и Js в .Net Core Layout View - PullRequest
0 голосов
/ 22 ноября 2018

Когда мы использовали стандартную платформу .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 .. Если кому-то из вас это удалось, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 22 ноября 2018

В ASP.NET Core мы не используем Server.MapPath.Вместо этого мы хотим использовать 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...