tag route page net mvc for change asp asp.net-mvc asp.net-mvc-2 master-pages

asp.net-mvc - route - select asp-for asp-items



¿Alguien que usa una ViewMasterPage personalizada? (1)

Últimamente, cuando he estado creando mis aplicaciones asp.net mvc, tiendo a tener una cantidad de elementos que constantemente deben calcularse, formatearse y configurarse en mis páginas maestras. Algunos de estos artículos incluyen:

  • Me gusta adjuntar etiquetas clasificadas específicas para el cuerpo como lo hace WordPress para ayudar a que mi CSS salga. Normalmente adjunto el nombre de la acción, el controlador, la plantilla de página, etc.
  • Me gusta trabajar con un IIdentity personalizado en mis páginas maestras. Este IIdentity incluye los usuarios nice Display Name, UserID, UserName, etc.
  • etc ... dependiendo del proyecto

La forma en que he logrado lograr esto también ha evolucionado. Comencé enviando ViewData junto con cada resultado de acción para completar cosas en la página maestra. ejemplo->

// 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"] %>">

Eso fue horrible. Así que comencé a poner algunas variables en la parte superior de mis páginas maestras y a poblarlas en función de los objetos con los que tenemos que trabajar en la página maestra. ejemplo ->

<%@ 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 %>">

Eso es mejor, pero siento que tiene que haber una solución más fácil. Empecé a jugar con la creación de una ViewMasterPage personalizada y agregar algunas propiedades públicas. ¿Alguien más está haciendo esto con la página maestra o hay otra solución a esto que me falta por completo?


He usado solo marcadores de posición de contenido regulares para identificaciones y clases de etiquetas corporales.

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

Luego utilícelo en la página dada que hace referencia a la página maestra:

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