我有以下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理解它应该在这种情况下在区域视图中搜索?