我是 ASP.NET MVC 的新手,我有一个问题希望你们能帮助我。我有两个简单的 Controller 。一个主 Controller 和一个用于局部 View 。在部分 View Controller 中,我有以下代码片段
public PartialViewResult PartialSection()
{
//query for partial view model
return PartialView("MyPartialView", viewModel);
}
然后在主视图上我做
@Html.Action("PartialSection", "MyPartialController")
上面会抛出以下错误:
The partial view '_MyPartialView' was not found or no view engine supports the searched locations.
如果我更改分部 View Controller 中的代码并提供分部的完整路径
return PartialView("~/Views/Common/_MyPartialView.cshtml", viewModel);
然后我没有收到任何错误,部分 View 按预期呈现。
所以我的问题是为什么在从不同的 Controller 调用它时必须提供 PartialView
的完整路径。
最佳答案
您需要传递完整路径,因为您使用的是自定义文件夹,而不是框架用来获取 View 的现有文件夹。
如果您将 View _MyPartialView.cshtml 放在文件夹 Views >> MyPartial >> 下,那么您不需要写完整的路径,但是因为您已经创建了一个new folder name Common 框架不知道在要求返回 View 时它也必须在该文件夹中查找。
默认情况下,框架只在两个位置查找 View 文件。
1) Views 文件夹内针对 Controller 命名目录的文件夹
2) 在 Views 目录下的 Shared 文件夹中
如果您不想这样做并希望将该 View 保留在 Common 文件夹中,在这种情况下,您可以必须让框架也查看您的自定义文件夹。
您可以在 Global.asax
的 Application_Start
事件中注册要查找 PartialView 的自定义文件夹:
RazorViewEngine razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().FirstOrDefault();
if (razorEngine != null)
{
var newPartialViewFormats = new[]
{
"~/Views/Common/{0}.cshtml"
};
razorEngine.PartialViewLocationFormats = razorEngine.PartialViewLocationFormats.Union(newPartialViewFormats).ToArray();
}
可以看看这个blogpost for details.
关于c# - 为什么需要为部分 View 提供完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285617/