在Razor中,当加载部分视图时,可以只指定部分视图名称,Razor视图引擎将搜索RazorViewEngine.PartialViewLocationFormats:
@Html.RenderPartial("_PartialView",Model);
将实际搜索视图引擎中的PartialViewLocationFormats中指定的位置,例如
~/Views/Home/_PartialView.cshtml ~/Views/Shared/_PartialView.cshtml
但是,当指定布局时,我似乎被迫指定布局的特定路径:
@Layout = "~/Views/Shared/MyLayout.cshtml";
我想做的是通过名称指定布局,并通过搜索公共位置的列表找到实际的布局:
@Layout = "MyLayout";
…但我找不到任何设施.由于我找不到任何有关此文档的文档,我尝试使用RazorViewEngine.MasterLocationFormats进行播放,但是在定位布局时不会使用此属性.
有人知道该怎么做吗
解决方法
最近我在一个类似的问题上挣扎着,在一个使用自定义ViewEngine的主题应用程序中首先搜索主题的位置以查看主意,我试图覆盖一些主文件.强制布局定位通过ViewEngine的FindView的一种方法是在返回时指定控制器操作中主视图的名称:
return View("myView","myViewMaster");
但是,如果“myViewMaster”还具有布局(嵌套布局),则此方法对于嵌套布局不起作用.到目前为止,我最好的解决方案是直接在视图中调用视图引擎:
@{ Layout = (ViewEngines.Engines.FindView(this.ViewContext.Controller.ControllerContext,"myViewMaster","").View as RazorView).ViewPath; }
这是有效的,但当然可以封装在一个扩展方法中,以避免重复和抽象代码.
希望有帮助!