我想覆盖MasterPage标题。注意:我不是在谈论从内容页面设置标题的一部分。
我在MasterPage中有这个:
<head id="Head1" runat="server">
<title>My Site | <% = Page.Title %></title>
</head>
在我的内容页面上与此相结合...
<%@ Page Title="Content page title" ... %>
向用户提供以下内容:
<title>My Site | Content page title</title>
,99.9%的时间都很棒。但是,我希望能够更改传递给客户端的整个标题,以便它不包括MasterPage,IE中头部指定的部分:<title>Special content page</title>
是否可以通过编程方式从内容页面更改整个页面标题?我不想更改MasterPage的配置或使用不同的MasterPage。
编辑:我还需要能够在不更改现有内容页面的情况下实现此功能。对不起,我没有明确说明。我以为它会被理解
答案 0 :(得分:2)
将您的母版页标记更改为
<head id="Head1" runat="server">
<title><asp:Literal ID="MasterPageTitle" runat="server" /></title>
</head>
在你的masterpage.cs
中public string ExplicitTitle { get; set; }
protected void Page_PreRender(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(this.ExplicitTitle))
{
this.MasterPageTitle.Text = "My Site | " + Page.Title;
}
else
{
this.MasterPageTitle.Text = this.ExplicitTitle;
}
}
在“特殊内容页面”中将此内容添加到Page_PreRender
((MySiteMaster)this.Master).ExplicitTitle = "Special content title";
答案 1 :(得分:1)
根据您使用的ASP.Net形式,有两种方法。
如果您正在使用MVC,那么只需在ViewBag中设置一个名为“PageTitle”的属性,然后在您的母版页中引用它:
在HomeController.cs
中@ViewBag.PageTitle = 'Overridden Title'
在您的母版页中:
<head id="Head1" runat="server">
<title>My Site | <% = @ViewBag.PageTitle %></title>
</head>
如果您使用的是基于WebForms的应用程序,可以通过首先通过“混合服务器控件”公开html标题来实现此目的
在您的母版页中,将内容更改为:
<head id="Head1" runat="server">
<title id="MasterTitle" runat="server"></title>
</head>
然后在您的子页面中,在顶部添加对母版页的类型引用:
<%@ MasterType virtualpath="~/Templates/YourMasterPage.master" %>
在您的子页面代码中,您现在可以访问。
Master.MasterTitle.Text = "Overridden Title";
答案 2 :(得分:0)
对于VS2012,如果使用WebForms,则在子页面中,您的母版页中绝对不会更改任何内容。现在一切都可以通过您的子页面完成:
以下语句位于子页面代码的最顶层:
`<%@ Page Title="Insert Your Title here" Language="C#" MasterPageFile="~/MyMasterPage.Master" AutoEventWireup="true" CodeBehind="SomeChildPage.aspx.cs" Inherits="SomeProject.WebForm1" %>`
答案 3 :(得分:0)
在母版页
<title>
<asp:ContentPlaceHolder ID="cphMasterTitle"
runat="server"/>
</title>
在子页面
<asp:Content ID="contentChildTitle" ContentPlaceHolderID="cphMasterTitle"
runat="server">
<asp:literal ..... etc ... />
</asp:Content>
或不使用内容/占位符
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Title = "Child Title"
End Sub