任何人使用自定义ViewMasterPage?

时间:2010-07-09 17:34:25

标签: asp.net-mvc asp.net-mvc-2 master-pages

最近,当我构建我的asp.net mvc应用程序时,我倾向于有很多项目需要在我的母版页中进行计算,格式化和配置。其中一些项目包括:

  • 我喜欢将特定的类别附加到正文标签上,就像WordPress帮助我的CSS一样。我通常附上动作,控制器,页面模板等的名称。
  • 我喜欢在母版页中使用自定义IIdentity。此IIdentity包括用户不错的显示名称,用户ID,用户名等
  • 等......取决于项目

我实现这一目标的方式也在不断发展。我开始时通过发送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"] %>">

那太可怕了。所以我开始在主页的顶部放置一些变量,并根据我们在母版页中使用的对象填充它们。示例 - &gt;

<%@ 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 个答案:

答案 0 :(得分:1)

我只使用常规内容占位符作为正文标记ID和类。

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

然后在引用母版页的给定页面中使用它:

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