【问题标题】:Anyone Using a Custom ViewMasterPage?有人使用自定义 ViewMasterPage 吗?
【发布时间】:2010-07-09 17:34:24
【问题描述】:

最近,当我构建我的 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"] %>">

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

<%@ 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 并添加一些公共属性。是否有其他人使用母版页执行此操作,或者是否有其他我完全想念的解决方案?

【问题讨论】:

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


    【解决方案1】:

    我只使用常规内容占位符来表示正文标签 ID 和类。

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

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

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

    【讨论】:

    • 我使用与提问者相同的方法,但我想如果您希望您的页面充满冗长的 标签,这是有道理的。 ;)
    • 我从角色那里得到报酬。 ;)
    • @jfar - 您使用哪一种方法?您对自定义 ViewMasterPage 有什么看法,值得吗?
    • @DM,我已经说过“我使用与提问者相同的方法”。这意味着我使用与您相同的技术。
    • @jfar,我知道你指的是我。我展示了 2 个不同的选项(1 个使用 ViewData,1 个使用母版页顶部的内联代码)。我很好奇您通常使用哪一种?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2015-03-30
    相关资源
    最近更新 更多