Как установить заголовок страницы со страницы веб-контента в ASP.NET 3.5 - PullRequest
8 голосов
/ 19 февраля 2010

Я прочитал довольно много постов / статей о том, как это сделать, и я до сих пор не могу установить заголовок страницы со страницы содержимого. Мои страницы отображаются нормально, за исключением того, что я не могу получить набор заголовков со страницы содержимого (на всех страницах заголовок установлен в соответствии с главной страницей). Вот код для моей главной страницы:

Partial Class zSEO
Inherits System.Web.UI.MasterPage
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Page.Header.Title = "Dynamically set in Master page"
    End Sub
End Class

Вот остальная часть главной страницы:

<%@ Master Language="VB" 
EnableTheming="true"
Inherits="zSEO" 
CodeFile="zSEO.master.vb" %>
<!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" >
     <head id="Head1" runat="server">
         <title></title>
     </head>
 <body>
 <form id="form1" runat="server">    

 <div id="container">
     <div id="content">
         <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
         </asp:contentplaceholder>
     </div>    
 </div>      
 </form>
 </body>
</html>

Тем не менее, именно на странице веб-контента я хочу установить значение для этой страницы, и я разместил это на своей странице контента тестирования:

Public Partial Class zShowAd
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    Page.Header.Title = "Dynamically set TITLE value in the content(child) page"
End Sub

End Class

Странно, я не могу заставить отладчик остановиться на строке выше на странице содержимого - только на соответствующей строке на главной странице. Очевидно, я запутался в этом.

Я читал, что есть и другие способы сделать это, но это было возможно из того, что я прочитал в уроке Скотта Митчелла по адресу: Динамическая установка заголовка страницы в ASP.NET . В частности, я пытался следовать этому из статьи: "Кроме того, если вы используете главные страницы, этот код может работать в том виде, в котором он написан, либо с главной страницы, либо со страницы ASP.NET, которая использует главную страницу. В таком случае регион должен быть определен в главной страницы, но страница ASP.NET по-прежнему может обращаться к ней через Page.Header. "

Ответы [ 7 ]

10 голосов
/ 19 февраля 2010

Что должно произойти, это

MasterPage.Master

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    Me.Page.Title = "Dynamically set in Master page"
End Sub

Default.aspx

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Me.Page.Title = "Dynamically set in ASPX page"
End Sub

Таким образом, заголовок вашей главной страницы устанавливается ДО заголовка страницы контента.Если вы не установите заголовок на странице содержимого, главной страницей будет заголовок по умолчанию.Если вы зададите заголовок на странице содержимого, он будет переопределен.

6 голосов
/ 19 февраля 2010

Проблема в том, что метод Page_Load на странице выполняется перед методом Page_Load в пользовательских элементах управления на странице, а главная страница фактически является пользовательским элементом управления.

Вместо этого вы можете использовать метод Page_Init на главной странице.

3 голосов
/ 19 февраля 2010

Вы должны помнить, что MasterPage является дочерним элементом управления страницы, поэтому событие OnLoad запускает после события OnLoad страницы.

В вашем сценарии / примере страница установит заголовок, а затем мастер-страница установит его снова. Либо установите его позже в жизненном цикле, либо добавьте немного логики, кто, возможно, его устанавливает?

У Скотта Аллена есть хорошая статья на эту тему специально для Мастер-страницы: Дайте ему краткое прочтение, чтобы почувствовать порядок жизненного цикла .

2 голосов
/ 21 сентября 2015

более простое решение на главной странице <%: Page.Title%> - главное название здесь

в первой строке страницы содержимого <% @ Page Title = "Your Title" Language = "C #" MasterPageFile = "~ / _masterpages / ... etc </p>

2 голосов
/ 04 февраля 2014

У меня тоже была эта проблема. Я не могу отредактировать главный файл (слишком много возможных побочных эффектов), поэтому я использовал метод страниц PreRender (), который запускает после главных страниц Page_Load ()

protected void Page_PreRender(object sender, EventArgs e)
{
    Page.Title = Page.Title + " - server error 500";
}
0 голосов
/ 31 декабря 2016

для объединения страницы Заголовок с вашей MasterPage по умолчанию Заголовок вы можете использовать стандартный шаблон, который использует шаблон веб-приложения ASP.NET по умолчанию.

<head runat="server">
    <title > <%: Page.Title %> | Portal Main site Name </title>

это путь к этой странице. Заголовок читается с отдельных страниц

<%@ Page Title="Virtual Machines" ...>
0 голосов
/ 19 февраля 2010

Другое решение, которое я иногда использовал, - это поместить заполнитель содержимого между тегами заголовка на главной странице, затем вы можете использовать элемент управления меткой в ​​теге содержимого и отобразить его.

таким образом, вы можете присвоить странице заголовок после того, как элементы управления отправлены обратно, например.

...