3

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

4 回答 4

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";
于 2013-10-06T06:42:02.160 回答
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";
于 2013-03-21T22:11:21.053 回答
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
于 2014-09-30T19:03:47.930 回答
0

对于 VS2012,在您的子页面中,如果使用 WebForms,则您的母版页中完全没有任何更改。现在一切都可以通过您的子页面完成:

以下语句位于子页面代码的最顶部:

`<%@ Page Title="Insert Your Title here" Language="C#" MasterPageFile="~/MyMasterPage.Master" AutoEventWireup="true" CodeBehind="SomeChildPage.aspx.cs" Inherits="SomeProject.WebForm1" %>`
于 2013-09-21T08:59:07.153 回答