我的母版页看起来像:
<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”的情况下呈现,就像它被忽略了一样。
为什么会发生这种情况,我该如何实现?
在MasterPage背后的代码中尝试这个:
void MasterPage_PreRender(object sender, EventArgs e)
{
Page.Title = "Example.com - " + Page.Title;
}
从母版页中删除标题标记并使用Martin提供的代码。现在,在您的内容页面中,在文件顶部的Page标签中设置标题,如下所示:
<%@ Page ... Title="Contact" %>
我发现最可接受的工作是使用多个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>
。
删除“runat =”服务器“”,但我不确定,试试吧
<head>
<title>
Example.com:
<asp:ContentPlaceHolder ID="PageTitlePlaceHolder" runat="server" />
</title>
两种选择。一个是从runat=server
(jefferydu)删除<head>
两个是使用Page.Title作为字符串。 (马丁)
我更喜欢使用我在某处写的对象,为我使用的任何页面添加了Facebook的标题,搜索引擎的描述等。此对象将页面标题存储在三个字符串中 - 一个在前,一个是页面标题,一个是后面的。
在主页面,Put
<title>websitename.com -<%: Page.Title.ToString() %> </title>
其中websitename.com是该网站的域名。
然后在每个内容页面中,输入标题。