2010-07-09 23 views
2

最近,當我一直在構建我的asp.net mvc應用程序時,我傾向於在我的母版頁中一直需要計算,格式化和配置多個項目。其中一些項目包括:任何使用自定義ViewMasterPage的人?

  • 我喜歡附加特定類別的身體標籤像WordPress一樣幫助我的CSS。我通常附上動作,控制器,頁面模板等的名稱。
  • 我喜歡在我的母版頁中使用自定義IIdentity。這IIdentity的包括用戶不錯的顯示名稱,用戶名,用戶名等
  • 等..根據項目

的方式我已經約完成這一也在演變。我開始通過發送ViewData以及每個操作結果來填充母版頁中的內容。例如 - >

// in the action 
ViewData["BodyClasses"] = "index home default"; 
ViewData["UserData"] = userData; 

return View(); 

// in the master page 
<% UserData userData = (UserData)ViewData["UserData"] %> 
... 
<body class="<%= (string)ViewData["BodyClasses"] %>"> 

這太可怕了。所以我開始在我的母版頁頂部放置一些變量,並根據我們在母版頁中使用的對象填充它們。例如 - >

<%@ Master Language="C#" Inherits="System.Web.MVC.ViewMasterPage" %> 
<% string controller = ViewContext.RouteData.Values["controller"].ToString().ToLower(); 
    string action = ViewContext.RouteData.Values["action"].ToString().ToLower(); 
    CustomIdentity identity = (CustomIdentity)User.Identity %> 

... 

<body class="no-js <%= controller + " " + action %>"> 

這樣更好,但我覺得必須有一個更簡單的解決方案。我開始嘗試創建一個自定義的ViewMasterPage並添加一些公共屬性。是否有其他人正在使用母版頁進行此操作,還是有另一種解決方案,我完全失蹤了?

回答

1

我只使用常規內容佔位符來標記身體標記ID和類。

<body id="<asp:ContentPlaceHolder ID="BodyTagId" runat="server" />"> 

然後用它在給定的頁面引用母版頁:

<asp:Content ContentPlaceHolderID="BodyTagId" runat="server">about-page</asp:Content> 
+0

我用同樣的方法提問,但我想這是有道理的,如果你希望你的頁面充滿羅嗦標籤。 ;) – jfar 2010-07-09 18:11:00

+2

我得到了角色的支付。 ;) – a7drew 2010-07-09 18:25:58

+0

@jfar - 你使用哪種方法?什麼是您對自定義ViewMasterPage的想法,值得嗎? – 2010-07-09 20:48:35