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

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

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

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

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

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

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

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

  1. Сделал бы теги Title / H1 на мастер runat= "сервер"
  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 -» должна быть шаблоном для заголовка.

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

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

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

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

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

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

не работает

1 голос
/ 05 ноября 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 - Просмотр с главной страницы, как установитьназвание .

0 голосов
/ 05 ноября 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" из вашей головы.

...