У меня есть следующие 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 понять, что в этой ситуации он должен искать в представлениях области?





Думаю, ваш вопрос похож на этот. В этом поможет https://stackoverflow.com/questions/4390045/asp-net-mvc-rend er-a-partial-view-fr om-an-area