Создание подзаголовка с главной страницей и ContentPlaceHolder

У меня есть сайт с несколькими страницами, и я бы хотел, чтобы названия страниц были такими:

Foo - 1st Page
Foo - 2nd Page
Foo - 3rd Page

Я создал главную страницу со следующим кодом:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Foo.master.cs" Inherits="Foo" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Foo - <asp:ContentPlaceHolder ID="SubTitle" runat="server"></asp:ContentPlaceHolder></title>
</head>
<body>
    <asp:ContentPlaceHolder ID="MainContent" runat="server">
    </asp:ContentPlaceHolder>
</body>
</html>

И тогда каждая страница выглядит так:

<%@ Page Language="C#" MasterPageFile="~/Foo.Master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="SubTitle" runat="server">1st Page</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <a href="Page2.aspx">Page 2</a>
</asp:Content>

Когда я загружаю страницу в браузере, я ожидаю, что заголовок будет Foo - 1st Page, но это всего лишь 1st Page.

Источник html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
  1st Page
</title></head>
<body>

<a href="Page2.aspx">Page 2</a>

</body>
</html>

Что я делаю неправильно?


person Andrew Cooper    schedule 16.07.2013    source источник
comment
Что вы видите в качестве сгенерированного тега ‹title›? (Во всяком случае, для меня это необычное использование заполнителя.) Мне интересно, может ли быть лучшим решением установить свойство Title страницы в коде программной части.   -  person ThatBlairGuy    schedule 16.07.2013
comment
@ThatBlairGuy - я добавил исходный код html к своему вопросу. Шаблон главной страницы Visual Studio имеет ContentPlaceHolder с именем title в теге заголовка главной страницы. Я просто добавил текст Foo - перед ним и переименовал его в SubTitle.   -  person Andrew Cooper    schedule 16.07.2013


Ответы (2)


Вы не хотите удалять runat="server" из head; это создаст другие проблемы.

Используйте следующий метод, который является методом по умолчанию в приложении веб-форм ASP.Net в Visual Studio 2012.

<!-- Master Page -->
<head runat="server">
    <title>Foo - <%: Page.Title %></title>
</head>

<!-- Content Page/xxx.aspx -->
<%@ Page Title="Home Page" ...>
person Win    schedule 16.07.2013
comment
Отлично. Спасибо. Для меня отсутствие runat="server" не вызовет проблем (это всего лишь небольшая группа тестовых страниц, в которых больше ничего нет в head), но я принял ваше предложение, потому что оно упрощает код. - person Andrew Cooper; 17.07.2013

Оказывается, этот вопрос уже задавался: ASP.NET: иметь общий заголовок страницы на главной странице, при этом каждая страница добавляет заголовок для конкретной страницы?

Прочитав ответы, я обнаружил, что удаление runat="server" из элемента head на главной странице помогло.

person Andrew Cooper    schedule 16.07.2013