这听起来像您的PageID仅在页面控制器中有用。
考虑将PageID通过ViewData
传递给您的视图。主页面可以简单地检查ViewData是否存在,并且可以选择调用你的Html辅助方法。
页数控制器:
ViewData["PageID"] = somePageID; //zero or non-zero.
万事达:当任何控制器INFACT通行证PAGEID在ViewData的值,则该HTML代码段将被写入。当它没有通过时,这是一个廉价的空检查。
<% if (ViewData["PageID"] != null)
{
Response.Write(Html.RenderNav(ViewData["PageID"]));
}
%>
这种风格对我来说是最有意义的。 PagesController将一个简单的值传入ViewData
。
将此与主页面进行对比,试着确定每个请求:URL是什么,Controller是谁,OK,现在去获取PageID,是数字还是ok,现在写HTML。所有这些逻辑不属于视图。按照惯例:保持视图愚蠢。
希望保持您的强类型ViewModels,但在ViewData
中使用。这样,这是一个简单的检查在主,这是不强类型的存在。
我会建议ViewData
战略更容易理解和维护。
这听起来是你想在Master中写出这个导航。 也许可以考虑将它移动到内容区域,其中视图具有对出现的内容的细粒度控制。
页面查看:
<asp:Content ID="nav" ContentPlaceHolderID="PagesNavContent" runat="server">
<%= Html.RenderNav(ViewData["PageID"])%>
</asp:Content>
我应该说我使用强类型的网页 - 每个视图有一个视图模型我创建。但是,我真的不想为每个ViewModel的pageId添加一个属性。我的意思是,我可以让其他系统(新闻,事件,日历,关于我们公司等)的每个视图在ViewModel中拥有一个pageId = 0,但是我希望能够检测到“我们是否在Pages Controller?使用pageID。否则,使用0“ – Mortanis 2010-06-05 04:32:51