Как установить заголовок страницы со страницы веб-содержимого в 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" ...>