在.Net Core布局视图中以编程方式包括Css和Js文件

时间:2018-11-22 14:22:57

标签: javascript c# css asp.net-core

当我们使用standart .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或在代码背后获取Server.Mappath。如果你们中的任何一个能成功,请告诉我。

1 个答案:

答案 0 :(得分:1)

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