未找到PartialView:ViewEngine在错误的位置搜索

时间:2018-05-24 08:48:01

标签: asp.net-mvc razor partial-views

我有以下3个文件(注意:只显示相关数据):

  

〜/控制器/ HomeController.cs

namespace MyApplication.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            return View();
        }
    }
}
  

〜/查看/主页/ Index.cshtml

@Html.Partial("~/Areas/AccountManager/Views/Account/_RegisterPopup.cshtml")
  

〜/地区/ MyArea /查看/帐户/ _RegisterPopup.cshtml

@Html.Partial("_PasswordInfo", null, new ViewDataDictionary())
  

〜/地区/ MyArea /查看/共享/ _PasswordInfo.cshtml

@using MyApplication.Areas.MyArea
<h2>PasswordInfo</h2>

当我将鼠标悬停在_RegisterPopup文件中的Html.Partial调用上方时,它会显示(view) ~/Areas/MyArea/Views/Shared/_PasswordInfo.cshtml并且应该能够找到此视图。

当我运行应用程序并导航到Home / Index页面(将调用HomeController索引方法)时,它将无法找到_PasswordInfo partial并抛出异常。该例外仅显示其~/Views/Home/~/Views/Shared/。它应该在~/Areas/MyArea/Views/搜索的位置。

我认为这里的问题是,由于主应用程序中的HomeController(而不是区域中的控制器)正在此处执行渲染,因此它只会在主应用程序中的视图中搜索,而不是在其区域中搜索。什么是解决这个问题的最佳方法?

我想隐约引用_PasswordInfo部分,所以当我改变它的路径时我不必担心引用。但是,通过提供完整路径@Html.Partial("~/Areas/MyArea/Views/Shared/_PasswordInfo.cshtml", null, new ViewDataDictionary())而不仅仅是其名称@Html.Partial("_PasswordInfo", null, new ViewDataDictionary())来引用partial,可以防止异常被抛出,正如预期的那样。

使用这种方法仍然是最好的吗?将视图引擎扩展为始终搜索区域会更好吗?或者是否有某种方法可以使ViewEngine理解它应该在这种情况下在区域视图中搜索?

0 个答案:

没有答案