Html.RenderAction("Menu", "Nav");
: Это ужасная рекурсия: Nav/Menu
, которая отображает Nav/Menu
, которая отображает Nav/Menu
, ..., пока вы не исчерпаете стек и ваш веб-сервер не будет: -)
Когда вы визуализируете дочернее действие, подобное этому, убедитесь, что у него нет мастера, или мастер будет повторять его снова, снова и снова, .... Поэтому измените это представление (~/Views/Nav/Menu.cshtml
) следующим образом:
@model IEnumerable<SStore.WebUI.Models.NavLink>
@{
Layout = null;
}
@foreach (var link in Model)
{
Html.RouteLink(link.Text, link.RouteValues);
}
Позвольте мне объяснить:
В примере, который вы видели в книге, использовался механизм просмотра WebForms. В этом механизме просмотра у вас есть .aspx
(представления) и .ascx
(частичные). Я предполагаю, что в книге они использовали Menu.ascx
, который по умолчанию не имеет мастера, потому что он является частичным.
В Razor больше нет такого различия. У вас просто есть представления: .cshtml страниц. Вам решать, есть ли у них хозяин или нет. Есть разные способы. Один - это то, что я показал ранее, другой - это return PartialView(navLinks)
внутри дочернего действия.