在asp.net core mvc中,我为视图指定了多个位置。因此,如果某个位置缺少视图,则会从其他位置获取该视图。
我有一个带有asp.net核心mvc的CMS,其中控制器和视图来自编译库。如果我不想使用图书馆中的视图,则可以轻松添加新视图,例如/Views/ControllerName/Index.cshtml
然后应用程序将使用此视图而不是从库中获取。
如何在剃须刀页面中完成?基本上,我希望通过在某个位置添加.cshtml文件来覆盖任何页面的剃刀视图。
答案 0 :(得分:3)
使用IViewLocationExpander
,在默认位置之前添加自定义位置。
这是一个可以查看" Override"文件夹:
public class MyViewLocationExpander : IViewLocationExpander
{
public IEnumerable<string> ExpandViewLocations(
ViewLocationExpanderContext context,
IEnumerable<string> viewLocations)
{
// {2} = Area
// {1} = Controller
// {0} = Action
var locations = new string[] { "/Views/Override/{2}/{1}/{0}.cshtml" };
return locations.Union(viewLocations);
}
public void PopulateValues(ViewLocationExpanderContext context)
{
}
}
然后在Startup
课程中注册:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationExpanders.Add(new MyViewLocationExpander());
});
}
答案 1 :(得分:0)
我没有使用此处建议的其他解决方案(IViewLocationExpander或PageViewLocationFormats)在ASP.NET Core 2.2中使用此功能。对我有用的是将PageRouteModelConvention与ActionConstraint结合使用。
这是用于本地化的类似解决方案: