Reputation: 444
I'm trying to change the default views location so the following works:
[Route("")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
The location of where I want the views is /MVC/Views/ControllerName/Index(MethodName)
I've attempt by adding the following to Startup => ConfigureServices (IServiceCollection)
services.Configure<RazorViewEngineOptions>(o =>
{
o.AreaViewLocationFormats.Clear();
o.AreaViewLocationFormats.Add("/MVC/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
});
The following works but I would prefer for it to default to the correct path
return View("/MVC/Views/Home/Index.cshtml");
Upvotes: 8
Views: 5113
Reputation: 11611
The accepted answer is correct, if anyone is looking for changing the default view folder location for Areas
(like me), here is the solution:
services.Configure<RazorViewEngineOptions>(options =>
{
options.AreaViewLocationFormats.Clear();
options.AreaViewLocationFormats
.Add($"/Path/To/Views/{{1}}/{{0}}{RazorViewEngine.ViewExtension}");
options.AreaViewLocationFormats
.Add($"/Path/To/Views/Shared/{{0}}{RazorViewEngine.ViewExtension}");
});
Upvotes: 0
Reputation: 671
As stated in this answer:
From .Net-Core v2.0 upwards you can use ViewLocationFormats
and AreaViewLocationFormats
in RazorViewEngineOptions to modify the View look-up.
The option you are looking for is ViewLocationFormats
since you're not using View Areas.
Your Solution would be along these lines:
services.Configure<RazorViewEngineOptions>(o =>
{
o.ViewLocationFormats.Clear();
o.ViewLocationFormats.Add("/MVC/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
o.ViewLocationFormats.Add("/MVC/Views/Shared/{0}" + RazorViewEngine.ViewExtension);
});
The last line is only needed if you have the shared Layouts and Paritals at that location and not in the Standard Folder.
Upvotes: 11