這聽起來像您的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