Как установить заголовок страницы со страницы веб-содержимого в ASP.NET 3.5

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

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 все еще может получить доступ к нему через Page.Заголовок. "

7 ответов


Итак, что должно произойти, это

MasterPage.Мастер!--6-->

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

по умолчанию.аспн

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

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


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

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


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

в вашем сценарии / примере страница установит заголовок, затем masterpage установит его снова после этого. Либо установите его позже в жизненном цикле, либо оберните еще немного логики вокруг того, кто его устанавливает?

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


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

protected void Page_PreRender(object sender, EventArgs e)
{
    Page.Title = Page.Title + " - server error 500";
}

более простое решение на главной странице - основной заголовок идет здесь

в первой строке страницы содержимого


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

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


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

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

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

<%@ Page Title="Virtual Machines" ...>