以编程方式更改页面标题的母版页页面部分

时间:2013-03-21 22:00:51

标签: c# asp.net

我想覆盖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。

编辑:我还需要能够在不更改现有内容页面的情况下实现此功能。对不起,我没有明确说明。我以为它会被理解

4 个答案:

答案 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