ASP.NET: наличие общего заголовка страницы на главной странице с каждой страницей, добавляющей заголовок для конкретной страницы?

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

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

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

<asp:Content ID="TitleContent1"
     ContentPlaceHolderID="PageTitlePlaceHolder" runat="Server">
    My Page
</asp:Content>

Это работает путем размещения на странице определенного заголовка страницы (в данном примере «Моя страница»). Теперь я хочу добавить глобальный префикс к заголовку на моей главной странице для имени сайта. Я хочу:

<head runat="server">
    <title>
        Example.com:
        <asp:ContentPlaceHolder ID="PageTitlePlaceHolder" runat="server" />
    </title>

Однако, когда я делаю это, страницы содержимого по-прежнему отображаются без «Example.com» в плитке, это как будто игнорируется.

Почему это происходит и как этого добиться?


person User    schedule 26.08.2010    source источник


Ответы (6)


Попробуйте это в коде MasterPage:

void MasterPage_PreRender(object sender, EventArgs e)
{
    Page.Title = "Example.com - " + Page.Title;
}
person Martin    schedule 26.08.2010
comment
Не работает. При пошаговом выполнении кода при выполнении этой строки свойство Page.Title остается пустым. - person User; 27.08.2010
comment
Попробуйте переместиться вниз по жизненному циклу страницы MasterPage ... это свойство пусто в MasterPage_Load? - person Martin; 27.08.2010
comment
Подумай, что ты здесь делаешь. По сути, вы говорите Page.Title = Page.Title. Вам нужно указать содержимое страницы в заполнителе содержимого, например: Page.Title = "My Website Name - " + MyContentPlaceHolder.Page.Title Поместите это в событие Page_load своей главной страницы. - person user1003916; 14.11.2012

Удалите тег заголовка с главной страницы и используйте код, предоставленный Мартином. Теперь на ваших страницах содержимого установите заголовок в теге Page в верхней части файла следующим образом:

<%@ Page ... Title="Contact" %>
person Daryl Faulkner    schedule 15.03.2012

Наиболее приемлемым решением для меня является использование нескольких ContentPlaceHolder элементов управления.

<head runat="server">
    <title>
        <asp:ContentPlaceHolder ID="cphMasterTitle" runat="server">Example.com: </asp:ContentPlaceHolder>
        <asp:ContentPlaceHolder ID="cphSubtitle" runat="server" />
    </title>
</head>

Обратите внимание, что любое другое содержимое внутри <title>, включая пробелы, удаляется. Любые интервалы между содержимым ContentPlaceHolder должны выполняться внутри элементов управления.

Я также использовал <asp:Literal runat="server">Example.com: </asp:Literal>, когда не хочу открывать заполнитель для страниц с содержимым.

person Jake    schedule 13.11.2017

удалите "runat =" server "", но я не уверен, попробуйте

<head>
    <title>
        Example.com:
        <asp:ContentPlaceHolder ID="PageTitlePlaceHolder" runat="server" />
    </title>
person JeffZhnn    schedule 26.08.2010

Два варианта. один - удалить runat=server из <head> (jefferydu)

Два использует Page.Title как строку. (Мартин)

Я предпочитаю использовать объект, который я где-то написал, который добавляет также заголовок для facebook, описание для поисковых систем и т. Д. Для любой страницы, которую я использовал. Этот объект хранит заголовок страницы в виде трех строк: одна перед, одна - заголовок страницы, одна после.

person Moshe L    schedule 15.03.2012

на главной странице поместите

    <title>websitename.com -<%: Page.Title.ToString() %> </title>

где websitename.com - доменное имя сайта.

а затем на каждой странице содержимого введите заголовок.

person xolani maphumulo    schedule 28.04.2019