听起来您的 PageID 仅在 Pages Controller 中有用。
考虑通过 将 PageID 传递ViewData
到您的视图中。母版页可以简单地检查 ViewData 是否存在,并可选择调用您的 Html 帮助器方法。
页面控制器:
ViewData["PageID"] = somePageID; //zero or non-zero.
Master:当任何控制器实际上在 ViewData 中为 PageID 传递一个值时,将写入 Html 片段。当它没有通过时,它是对 null 的廉价检查。
<% if (ViewData["PageID"] != null)
{
Response.Write(Html.RenderNav(ViewData["PageID"]));
}
%>
这种风格,对我来说,最有意义。PagesController 将一个简单的值传递给ViewData
.
将此与母版页进行对比,尝试在每个请求上确定:URL 是什么,谁是控制器,好的,现在去获取 PageID,它是数字,好的,现在编写 HTML。所有这些逻辑都不属于视图。按照惯例:让 Views 保持沉默。
宁愿把它放在你的强类型 ViewModels 之外,而是在ViewData
. 这样,它是对 Master 中存在性的简单检查,它不是强类型的。
我建议该ViewData
策略更易于理解和维护。
听起来你想在 Master 中写出这个 Navigation。也许考虑将其移动到 Content Area,其中 View 可以对显示的内容进行细粒度控制?
页面视图:
<asp:Content ID="nav" ContentPlaceHolderID="PagesNavContent" runat="server">
<%= Html.RenderNav(ViewData["PageID"])%>
</asp:Content>