代码之家  ›  专栏  ›  技术社区  ›  DM.

有人使用自定义的视图母版页吗?

  •  2
  • DM.  · 技术社区  · 14 年前

    最近,当我构建我的ASP.NET MVC应用程序时,我倾向于在我的母版页中有一系列需要持续计算、格式化和配置的项。其中一些项目包括:

    • 我喜欢将特定的类附加到body标签,就像WordPress帮助我的CSS一样。我通常会附加操作、控制器、页面模板等的名称。
    • 我喜欢在我的主页上使用自定义标识。此标识包括用户的显示名称、用户名、用户名等。
    • 等。。。取决于项目

    我实现这一目标的方式也有所发展。我首先发送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 %>">
    

    这更好,但我觉得必须有一个更简单的解决方案。我开始尝试创建一个自定义的视图母版页并添加一些公共属性。是否有其他人使用母版页进行此操作,或者是否有其他解决方案完全丢失?

    1 回复  |  直到 14 年前
        1
  •  1
  •   a7drew    14 年前

    我只是在body tag id和类中使用常规内容占位符。

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

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

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