我是ASP.NET MVC的新手,我有一个问题,希望你们能帮助我。我有两个简单的控制器。一个主控制器和一个局部视图。在局部视图控制器中,我有以下代码段
public PartialViewResult PartialSection()
{
//query for partial view model
return PartialView("MyPartialView", viewModel);
}
然后在主视图上我做
@Html.Action("PartialSection", "MyPartialController")
以上引发了以下错误:
部分视图' _MyPartialView'找不到或没有视图引擎支持搜索的位置。
如果我更改部分视图控制器中的代码并提供部分的完整路径
return PartialView("~/Views/Common/_MyPartialView.cshtml", viewModel);
然后我没有收到任何错误,部分视图按预期呈现。
所以我的问题是为什么在从不同的控制器调用它时我必须提供PartialView
的完整路径。
答案 0 :(得分:4)
您需要传递完整路径,因为您使用的是自定义文件夹,而不是使用框架用来获取视图的现有文件夹。
如果您将视图 _MyPartialView.cshtml 放在视图>>文件夹下MyPartial>> 然后你不需要编写完整的路径,但是因为你创建了一个新的文件夹名称 Common 框架不知道它必须在那个文件夹中查找当要求退回视图时。
默认情况下,框架仅在View文件的两个位置查找。
1) 视图文件夹
内控制器命名目录的文件夹2) 视图目录中的共享文件夹
如果您不想这样做并且想要在 Common 文件夹中保留该视图,那么您必须告诉框架查看您的自定义文件夹。< / p>
您可以在Application_Start
的{{1}}活动中注册要查找PartialViews的自定义文件夹:
Global.asax
您可以查看此blogpost for details.
答案 1 :(得分:0)
从MyPartialController中删除Controller
所以而不是
@Html.Action("PartialSection", "MyPartialController")
试
@Html.Action("PartialSection", "MyPartial")
答案 2 :(得分:0)
执行以下操作:
public PartialViewResult PartialSection()
{
//query for partial view model
return PartialView("_MyPartialView", viewModel);
}
请致电如下:
@Html.Action("PartialSection", "MyPartial")