Похоже, ваш PageID полезен только в контроллере страниц.
Подумайте о передаче PageID через ViewData
в свой просмотр. Главная страница может просто проверить, существуют ли ViewData, и при необходимости вызвать ваш вспомогательный метод Html.
Контроллер страниц :
ViewData["PageID"] = somePageID; //zero or non-zero.
Мастер : когда какой-либо из контроллеров передает значение в ViewData для PageID, будет записан фрагмент HTML-кода. Когда он не пройден, это недорогая проверка на ноль.
<% if (ViewData["PageID"] != null)
{
Response.Write(Html.RenderNav(ViewData["PageID"]));
}
%>
Этот стиль, для меня, имеет наибольшее значение. PagesController передает простое значение в ViewData
.
Сравните это с главной страницей, пытающейся при каждом запросе определять: что это за URL, кто такой Контроллер, хорошо, теперь иди и получи PageID, если он числовой, хорошо, теперь пиши HTML. Вся эта логика не принадлежит представлению. Как гласит соглашение: держите Взгляды немыми.
Не используйте это в строго типизированных ViewModels, а используйте в ViewData
. Таким образом, это простая проверка на существование в Мастере, которая НЕ является строго типизированной.
Я полагаю, что стратегию ViewData
легче понять и поддерживать.
Звучит, что вы хотите записать эту Навигацию в Мастер. Возможно, рассмотрите возможность перемещения его в область содержимого , где представление имеет детальный контроль над тем, что появляется?
Просмотр страниц :
<asp:Content ID="nav" ContentPlaceHolderID="PagesNavContent" runat="server">
<%= Html.RenderNav(ViewData["PageID"])%>
</asp:Content>