为什么有必要为部分视图提供完整路径

时间:2016-03-29 13:23:31

标签: c# asp.net asp.net-mvc

我是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的完整路径。

3 个答案:

答案 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")