Кто-нибудь использует пользовательский ViewMasterPage? - PullRequest
2 голосов
/ 09 июля 2010

В последнее время, когда я создавал свои приложения mpc asp.net, у меня, как правило, было несколько элементов, которые постоянно нужно рассчитывать, форматировать и настраивать на моих главных страницах.Вот некоторые из этих элементов:

  • Мне нравится прикреплять определенные классы к тегу 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 %>">

Это лучше, но я чувствую, что должно быть более простое решение.Я начал играть с созданием пользовательского ViewMasterPage и добавлением некоторых общедоступных свойств.Кто-нибудь еще делает это с главной страницей или есть другое решение, которое я полностью упускаю?

1 Ответ

1 голос
/ 09 июля 2010

Я использовал только обычные заполнители содержимого для идентификаторов и классов тегов тела.

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

Затем используйте его на данной странице, которая ссылается на главную страницу:

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