ASP.NET MVC - как разработать динамическую схему H1 / заголовка?

Если у меня есть веб-приложение ASP.NET MVC 2 со следующими представлениями:

  1. Main.aspx
  2. Page1.aspx
  3. Page2.aspx

И все представления наследуются от MasterView под названием Site.master,

Я хочу иметь для страницы default Title / H1, который можно переопределить в производных представлениях.

Например, Main.aspx будет иметь «MySite - xxx», Page1.aspx будет иметь «MySite - Page 1», Page2.aspx будет иметь «MySite - Page2».

И если я выберу не устанавливать заголовок / H1 в новом производном представлении, будет отображаться главный заголовок / H1.

С помощью WebForms я бы сделал это следующим образом:

  1. Сделайте теги Title / H1 на главном runat = "server"
  2. Показывать защищенные свойства в главном коде программной части
  3. На Page_Load производного кода программной части установите свойство (Master.Title = "Page 1").
  4. На Page_PreRender главного кода программной части установите для тегов Title / H1 значение "Мой сайт -" + Title;

Как мы можем добиться этого с помощью ASP.NET MVC?

Я мог бы сделать это в мастере:

<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>

А затем установите его в представлении:

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    MySite - Page 1
</asp:Content>

Но я хотел иметь возможность указывать только «Страница 1» в представлении, а заголовок волшебным образом менялся на «MySite - Page 1». Знаешь что я имею ввиду? Часть заголовка «MySite -» должна быть шаблоном для заголовка.

Я, наверное, упускаю здесь что-то очевидное. :)


person RPM1984    schedule 05.11.2010    source источник
comment
Меня это тоже интересует, потому что я хотел того же, что и был удивлен, обнаружив, что <title>MySite<asp:content.... /></title> работает не так, как я ожидал.   -  person Paul Creasey    schedule 05.11.2010
comment
Даже не подумал об этом - спасибо, что сэкономил мне немного усилий (без награды, судя по всему).   -  person RPM1984    schedule 05.11.2010


Ответы (3)


С быстрым поиском я нашел это:

http://haacked.com/archive/2009/04/03/tipjar-title-tags-and-master-pages.aspx

объясняет почему

<title>MySite<asp:content..../></title>

не работает

person Diego Torres    schedule 05.11.2010
comment
Интересная статья, по общему признанию, я не думаю, что я действительно утруждал себя поиском в то время, не особо беспокоился, но я не знал, что это так работает. - person Paul Creasey; 05.11.2010

Вот как я обычно это делаю:

<title>MySite - <%: Page.Title ?? "Default title" %></title>

в вашем MasterPage.

Затем вы можете определить свойство Title на странице содержимого следующим образом:

<%@ Page Language="C#"
         MasterPageFile="~/Views/Shared/Site.Master"
         Inherits="System.Web.Mvc.ViewPage"
         Title="Page 1"
%>

Изменить:

Что ж, вы можете захотеть увидеть этот вопрос SO: ASP.NET MVC - Просмотр с главной страницей, как установить заголовок?.

person Bertrand Marron    schedule 05.11.2010

Это намного проще, как вы это описываете.

Просто добавьте заполнитель контента на главную страницу

<title>
    My Site - <asp:ContentPlaceHolder ID="PageTitle" runat="server" />
</title>

Затем на своей странице содержимого используйте его как

<asp:Content ID="Content3" ContentPlaceHolderID="PageTitle" runat="server">
    My Page
</asp:Content>

Этот способ будет работать, но вы должны использовать тег HTML HEAD, а не серверный элемент управления. Так что просто удалите runat="server" из HEAD.

person Lorenzo    schedule 05.11.2010