Pergunta

Eu li um pouco de postagens/artigos sobre como fazer isso e ainda não estou recebendo o título da página definido na página de conteúdo. Minhas páginas renderizam ok, exceto que não consigo obter o conjunto de títulos na página de conteúdo (todas as páginas têm o conjunto de títulos conforme a página mestre). Aqui está o CodeBehind para minha página mestre:

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

Aqui está o resto da página mestre:

<%@ 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>

No entanto, está na página de conteúdo da web que eu quero estabelecer o valor da página para a página e coloquei isso na minha página de conteúdo de teste:

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

Estranhamente, não consigo fazer com que o depurador pare na linha acima na página de conteúdo - apenas na linha correspondente na Página Master. Claramente, estou confuso com isso.

Eu li que existem outras maneiras de fazer isso, mas isso parecia ser possível pelo que li no tutorial de Scott Mitchell em: Definindo dinamicamente o título da página no ASP.NET. Especificamente, tentei seguir isso do artigo:"Além disso, se você estiver usando páginas mestres, esse código pode funcionar, conforme escrito, da página mestre ou da página do ASP.NET que usa a página mestre. Nesse cenário, a região deve ser definida na Página Master, Mas a página do ASP.NET ainda pode acessá -la via página.header. "

Foi útil?

Solução

Então, o que precisa acontecer é isso

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

Dessa forma, o título do seu mestre é definido antes do título da página de conteúdo. Se você não definir um título na página de conteúdo, a página master será o título padrão. Se você definir um título na página de conteúdo, ele o substituirá.

Outras dicas

O problema é que o método Page_load na página é executado antes do método Page_load nos controles do usuário na página e uma página mestre é na verdade um controle do usuário.

Você pode usar o método Page_init na página mestre.

Você deve se lembrar de que a página principal é um controle infantil da página, de modo que o OnLoad incêndios em eventos depois a página da página OnLoad evento.

No seu cenário/exemplo, a página definiria o título e a página master o definiria novamente depois. Defina -o mais tarde no ciclo de vida ou envolva mais uma lógica em torno de quem o define, talvez?

Scott Allen tem um bom artigo sobre isso especificamente para a Página Master, Dê uma leitura rápida para ter uma ideia do pedido do ciclo de vida.

Solução mais simples na página mestre < %: Page.Title %> - O título principal vai aqui

Na página de conteúdo Primeira linha dela <%@ página title = "seu título" idioma = "c#" MasterPageFile = "~/_MasterPages/... etc

Eu estava tendo esse problema também. Não consigo editar o arquivo mestre (muitos efeitos colaterais possíveis), então usei o método Pages Prender (), que dispara depois as páginas mestres página_load ()

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

Outra solução que usei às vezes é colocar um detentor de conteúdo entre as tags de título na página mestre, você pode usar um controle de etiqueta na tag de conteúdo e renderizá -la a isso.

Dessa forma, você pode dar um título à página após a publicação dos controles, por exemplo.

Para combinar a página Título com sua página principal padrão Título Você pode usar o modelo padrão que o modelo de aplicativo Web padrão ASP.NET usa.

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

Esta maneira desta página. Título é lido de páginas individuais

<%@ Page Title="Virtual Machines" ...>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top