ASP.NET:在母版页中有共同的页面标题,每个页面添加特定于页面的标题?

问题描述 投票:0回答:6

我的母版页看起来像:

<head runat="server">
    <title>
        <asp:ContentPlaceHolder ID="PageTitlePlaceHolder" runat="server" />
    </title>

内容页面如下:

<asp:Content ID="TitleContent1"
     ContentPlaceHolderID="PageTitlePlaceHolder" runat="Server">
    My Page
</asp:Content>

这通过在页面上放置内容页面特定标题(在此示例中为“我的页面”)来工作。现在我想在我的主页面中为网站名称添加一个全局前缀。所以我想:

<head runat="server">
    <title>
        Example.com:
        <asp:ContentPlaceHolder ID="PageTitlePlaceHolder" runat="server" />
    </title>

但是,当我这样做时,内容页面仍然在图块中没有“Example.com”的情况下呈现,就像它被忽略了一样。

为什么会发生这种情况,我该如何实现?

asp.net master-pages contentplaceholder page-title html-title
6个回答
3
投票

在MasterPage背后的代码中尝试这个:

void MasterPage_PreRender(object sender, EventArgs e)
{
    Page.Title = "Example.com - " + Page.Title;
}

2
投票

从母版页中删除标题标记并使用Martin提供的代码。现在,在您的内容页面中,在文件顶部的Page标签中设置标题,如下所示:

<%@ Page ... Title="Contact" %>

1
投票

我发现最可接受的工作是使用多个ContentPlaceHolder控件。

<head runat="server">
    <title>
        <asp:ContentPlaceHolder ID="cphMasterTitle" runat="server">Example.com: </asp:ContentPlaceHolder>
        <asp:ContentPlaceHolder ID="cphSubtitle" runat="server" />
    </title>
</head>

请注意,<title>中的任何其他内容(包括空格)都会被删除。 ContentPlaceHolder内容之间的任何间距都需要在控件内完成。

当我不想将占位符暴露给内容页面时,我也使用了<asp:Literal runat="server">Example.com: </asp:Literal>


0
投票

删除“runat =”服务器“”,但我不确定,试试吧

<head>
    <title>
        Example.com:
        <asp:ContentPlaceHolder ID="PageTitlePlaceHolder" runat="server" />
    </title>

0
投票

两种选择。一个是从runat=server(jefferydu)删除<head>

两个是使用Page.Title作为字符串。 (马丁)

我更喜欢使用我在某处写的对象,为我使用的任何页面添加了Facebook的标题,搜索引擎的描述等。此对象将页面标题存储在三个字符串中 - 一个在前,一个是页面标题,一个是后面的。


0
投票

在主页面,Put

    <title>websitename.com -<%: Page.Title.ToString() %> </title>

其中websitename.com是该网站的域名。

然后在每个内容页面中,输入标题。

© www.soinside.com 2019 - 2024. All rights reserved.