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

时间:2010-08-26 02:15:08

标签: asp.net master-pages contentplaceholder page-title html-title

我的母版页面如下:

<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”的情况下呈现,就像它被忽略了一样。

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

6 个答案:

答案 0 :(得分:3)

在MasterPage背后的代码中尝试:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分: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>

答案 3 :(得分:0)

删除“runat =”server“”,但我不确定,试试吧

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

答案 4 :(得分:0)

两个选项。 一个是从runat=server(jefferydu)

中删除<head>

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

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

答案 5 :(得分:0)

在主页面中,放入

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

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

,然后在“每个内容”页面中,放置标题。