Включение программных файлов Css и Js в .Net Core Layout View

2

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

  • 0
    почему бы просто не использовать тильду в исходном коде - вам на самом деле не нужно использовать server.mappath в макете, так как он разрешится сам при визуализации страницы
  • 0
    Щенки умрут, если вы попытаетесь использовать Server.MapPath в .Net Core. Смотри сюда
Теги:
asp.net-core

1 ответ

1
Лучший ответ

В 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();
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню