当我们使用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。如果你们中的任何一个能成功,请告诉我。
答案 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();
}
}