问题描述
我的Asp.Net Core项目的安排如下:
MyApp
--Folder1
Folder1Controller.cs
Index.cshtml
--Folder2
Folder2Controller.cs
Index.cshtml
--Views
Shared
etc..
我更改了启动方式,以便它知道此目录结构:
services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationFormats.Clear();
options.ViewLocationFormats.Add($"/Folder1/{{0}}{RazorViewEngine.ViewExtension}");
options.ViewLocationFormats.Add($"/Folder2/{{0}}{RazorViewEngine.ViewExtension}");
options.ViewLocationFormats.Add($"/Views/Shared/{{0}}{RazorViewEngine.ViewExtension}");
});
Folder1Controller
的代码如下:
public IActionResult Index()
{
return View();
}
它工作正常。但是,Folder2Controller
的代码看起来完全一样。问题在于,当它为Index()
执行Folder2
方法时,它首先会在Folder1
中查找。我可以这样做:
public IActionResult Index(string id)
{
return View("/Folder2/Index.cshtml");
}
我的问题是,有没有办法让Asp.Net Core首先在当前目录中查找?即使我使用相对路径("./Index"
),它仍然会先到达Folder1
。
解决方法
您可以将名称为控制器名称的文件夹添加到folder1,folder2,以便路由可以识别要查找的视图。
首先,如下更改文件夹结构:
MyApp
--Folder1
Folder1Controller.cs
--Folder1
Index.cshtml
--Folder2
Folder2Controller.cs
--Folder2
Index.cshtml
--Views
Shared
etc..
启动:
services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationFormats.Clear();
options.ViewLocationFormats.Add("/Folder1/{1}/{0}" + RazorViewEngine.ViewExtension);
options.ViewLocationFormats.Add("/Folder2/{1}/{0}" + RazorViewEngine.ViewExtension);
options.ViewLocationFormats.Add($"/Views/Shared/
{RazorViewEngine.ViewExtension}");
});
结果: {{0}}