У меня есть следующие 3 файла (примечание: отображаются только соответствующие данные):
~ / Controllers / HomeController.cs
namespace MyApplication.Controllers {
public class HomeController : Controller {
public ActionResult Index() {
return View();
}
}
}
~ / Views / Home / Index.cshtml
@Html.Partial("~/Areas/AccountManager/Views/Account/_RegisterPopup.cshtml")
~ / Areas / MyArea / Views / Account / _RegisterPopup.cshtml
@Html.Partial("_PasswordInfo", null, new ViewDataDictionary())
~ / Areas / MyArea / Views / Shared / _PasswordInfo.cshtml
@using MyApplication.Areas.MyArea
<h2>PasswordInfo</h2>
При наведении курсора мыши на вызов Html.Partial в файле _RegisterPopup отображается (view) ~/Areas/MyArea/Views/Shared/_PasswordInfo.cshtml
и он должен быть в состоянии найти это представление.
Когда я запускаю приложение и перехожу на страницу Home / Index (которая вызовет метод индекса HomeController), ему не удастся найти частичное _PasswordInfo и выдатьисключение.Исключение показывает только поиск ~/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())
предотвращает выбрасывание исключения, как и ожидалось.
Будет ли по-прежнему лучше использовать этот подход?Было бы лучше расширить механизм просмотра, чтобы всегда искать области?Или есть какой-то способ заставить ViewEngine понять, что он должен искать в представлениях области в этой ситуации?