我创建了一个RazorViewEngine子类来重新定义查找视图的位置。
我将PartialViewLocationFormats字符串数组设置为包含值
"~/Views/{1}/{0}.cshtml",
"~/Views/{1}/Partial/{0}.cshtml",
"~/Views/Shared/{0}.cshtml",
默认情况下,第一个和最后一个是默认的。第二个是我添加的那个,所以我可以在每个“Views / ControllerName”文件夹中有一个“Partial”子文件夹,用于仅由该控制器中的视图使用的部分视图,而不是将它们添加到“Views / Shared”文件夹
我遇到的问题是调用@Html.Partial("_TopNavbar")
正在查找并呈现位于“Views / Shared”文件夹中的“_TopNavbar.cshtml”文件,而不是在我的DashBoards的“Views / Dashboard”下面的文件中/部分“文件夹。
换句话说,在两个不同的文件夹中有两个名为“_TopNavbar.cshtml”的不同文件,我希望它可以在一个位置找到,因为它更具体并且首先出现在数组中,但它不起作用那种方式由于某些原因我不明白。
Partial调用在“Views / Dashboard / Index.cshtml”中,我通过直接导航到“localhost:port / Dashboard / Index”来访问它,所以我确定控制器和操作是正确的。
答案 0 :(得分:0)
我使用仅查找C#视图的子类RazorViewEngine取得了成功。我将其扩展为在特定的控制器文件夹中查找partials。
使用下面的CustomRazorViewEngine
并请求/Home/Index
在其视图中调用Html.Partial("_SomePartial")
将按此顺序查找部分内容:
这确实以正确的顺序返回部分视图。
public class CustomRazorViewEngine : RazorViewEngine
{
public CustomRazorViewEngine()
{
ViewLocationFormats = new[]
{
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml"
};
MasterLocationFormats = ViewLocationFormats;
PartialViewLocationFormats = new[]
{
"~/Views/{1}/Partials/{0}.cshtml",
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml"
};
}
}
通过清除所有现有的并添加新的自定义视图引擎,确保您只使用子类视图引擎。
<强>的Global.asax.cs 强>
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CustomRazorViewEngine());