天道酬勤,学无止境

ASP.NET: Having common Page title in master page with each page adding page-specific title?

My master page looks like:

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

Content pages look like:

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

This works by placing the content page specific title on the page ("My Page" in this example). Now I want to add a global prefix to the title in my master page for the site name. So I want:

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

However, when I do this content pages are still rendered without "Example.com" in the tile, it's like it's ignored.

Why is this happening and how can I achieve this?

评论

Try this in the code behind of the MasterPage:

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

Remove the title tag from the master page and use the code Martin provided. Now in your content pages set the title in the Page tag at the top of the file like so:

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

The work around I found most acceptable is to use multiple ContentPlaceHolder controls.

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

Note that any other content inside <title>, including whitespace, is stripped away. Any spacing between the ContentPlaceHolder content needs to be done inside the controls.

I've also used <asp:Literal runat="server">Example.com: </asp:Literal> when I don't want to expose a placeholder to the content pages.

remove the "runat="server"" but i'm not sure,try it

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

Two options. one is remove runat=server from <head> (jefferydu)

Two is using the Page.Title as string. (Martin)

I prefer to use a object I wrote somewhere that add also Title for facebook, description for search engines, etc for any page I used. This object stores the page title in three strings- one before, one is page title, one after.

in the master Page, Put

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

where websitename.com is the domain name of the website.

and then in Each Content page , put a title.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • ASP.NET 母版页(概述、创建)
    文章目录 一、母版页概述1、母版页的运行机制2、母版页的优点 二、创建母版页三、创建内容页 一、母版页概述 母版页的主要功能是:创建统一的用户界面和样式。它由一个母版页和(多个)内容页构成,这些内容页和母版页合并将母版页的布局与内容页的内容组合在一起输出。 它可以简化以往重复设计每个Web页面的工作。母版页中承载了网站的统一内容和设计风格。 母版页是具有扩展名.master的文件,它包含静态文本、HTML元素和服务器控件的预定义布局。母版页由特殊的@Master识别,该指令替换了普通.aspx页面的@Page指令。 内容页包含页面中的非公共内容。通过创建各个内容页来定义母版页的占位符控件的内容,这些内容页是绑定到特定母版页的ASP.NET页(.aspx文件以及可选的代码隐藏文件)中。 使用母版页,必须首先创建母版页再创建内容页。 1、母版页的运行机制 在运行的时候,母版页按照下面的步骤处理: (1)通过输入内容页的URL来请求某页(2)获取之后,读取该页的@Page指令。如果该指令引用一个母版页,则读取该母版页。如果是第一次请求这两个页,则两个页都要进行编译。(3)包含更新内容的母版页合并到内容页的控件树中。(4)各个Content控件的内容合并到母版页相应的ContentPlaceHolder控件中。(5)浏览器中呈现得到的合并页。 2、母版页的优点
  • VS2012中无法识别的标记前缀或设备筛选器“ asp”(Unrecognized tag prefix or device filter 'asp' in VS2012)
    问题 我最近安装了VS2012,并处理了以前用于VS2010的工作项目。 我从来没有遇到过问题,VS2010不能识别asp前缀标签,而VS2012可以。 我尝试删除下面的ReflectedSchemas文件夹 C:\ Users [用户名] \ AppData \ Roaming \ Microsoft \ VisualStudio \ 11.0 \ 但仍然无法正常工作。 有人在VS2012中遇到此问题吗? 回答1 从解决方案资源管理器关闭并重新打开文件(.aspx文件不是解决方案)在Visual Studio 2015中对我有用。在尝试任何其他操作之前,您可以尝试一下。 回答2 您是否在Web.Config中碰到了类似这样的内容: <pages> <controls> <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0
  • ASP.NET母版页和内容页中的表单元素(Form Elements in ASP.NET Master Pages and Content Pages)
    问题 好的,我当前项目中的另一个坎bump。 我从来没有在我的两个主页和内容页的表单元素,我倾向于把所有形式的内容的相关指令。 但是,在当前项目中,我们有一个页面,他们需要两者。 右上方的登录表单和内容中的问题表单。 试图弄明白这一点之后,我遇到了ASP.NET的问题,抱怨在母版页中需要单个表单元素。 TBH,我真的不明白为什么这是ASP.NET的要求,但是,嘿。 有谁知道/是否/如何使母版页和内容页包含独立工作的表单元素? 如果没有,您能否提供有关如何继续获得所需外观/功能的建议? 回答1 以为我会回顾一些悬而未决的问题,看看是否可以解决其中的一些问题。 这是一个有趣的。 我完全拒绝相信您只能在ASP.NET页面上使用一种表单。 这对我来说毫无意义。 我已经看到很多网页在一个网页上具有多个表单,为什么ASP.NET页应该有所不同? 所以,这让我开始思考。 为什么ASP.NET页需要表单元素? ASP.NET页尝试通过PostBack模型提供状态持久性来模拟WinForms环境。 这为无状态环境提供了状态元素。 为此,运行时需要能够在每个“表单”中维护此状态。 它通过将数据回传到自身来实现。 重要的是要注意: 关于PostBack并没有真正的幻想。 它使用来自任何其他堆栈的HTTP形式和POST(与任何其他形式相同)。 仅仅因为看起来它可能正在做一些特别的事情,不是这样
  • 通过隐藏代码将 CANONICAL 标签添加到我的页面以进行 SEO?(Adding the CANONICAL tag to my page for SEO through code behind?)
    问题 我将 ASP.NET 与 MasterPages 一起使用。 因此,我不能将此链接放在引用我的 MasterPage 的页面中。 <link rel="canonical" href="http://www.erate.co.za/" /> 我需要将这个链接放在我的每个页面的页面加载中。 我将如何通过代码做到这一点? 我正在使用 VB.NET,但 C# 也将帮助我朝着正确的方向发展。 这就是我在后面的代码中为我的描述标签所做的。 Dim tag As HtmlMeta = New HtmlMeta() tag.Name = "description" tag.Content = "Find or rate any company in South Africa for FREE and rate them" Header.Controls.Add(tag) 提前致谢! 回答1 这就是我必须做的....... Dim seoTag As HtmlLink = New HtmlLink() seoTag.Attributes.Add("rel", "canonical") seoTag.Href = "http://www.erate.co.za/" Header.Controls.Add(seoTag) 更多信息在这里 回答2 为什么不创建您的规范元素作为服务器控件:
  • 如何在母版页上使用JQuery?(How to use JQuery with Master Pages?)
    问题 只要不涉及母版页,我就可以使简单的示例正常工作。 我要做的就是单击一个按钮,并使用母版页在.js文件中用javascript告诉它“ hello world”。 任何帮助,非常感谢:) 回答1 编辑 正如@Adam在评论中指出的那样,有一个本机的jQuery机制与我最初的回答中的hack基本相同。 使用jQuery,您可以做 $('[id$=myButton]').click(function(){ alert('button clicked'); }); 我的黑客最初是作为ASP.NET的原型工作而开发的,我将其修改为原始答案。 请注意,jQuery基本上是在后台执行相同的操作。 不过,我还是建议使用jQuery方式来实现我的hack。 原始答案留给评论上下文 当您使用母版页时,ASP.NET会处理从属页上控件的名称。 您需要找出一种方法来找到向其添加处理程序的正确控件(假设您要使用javascript添加处理程序)。 我使用此功能来做到这一点: function asp$( id, tagName ) { var idRegexp = new RegExp( id + '$', 'i' ); var tags = new Array(); if (tagName) { tags = document.getElementsByTagName( tagName ); }
  • 错误CS0433“ A.dll和B.dll中都已经存在类型'X'”从何而来?(Where does error CS0433 “Type 'X' already exists in both A.dll and B.dll ” come from?)
    问题 当我使用内部Web服务器(而非IIS)从Visual Studio 2008 SP1运行Webapp时,收到上述错误。 完整错误(源文件Default.aspx.cs ): 编译器错误消息:CS0433:类型'WebApplication3.Site1'在'c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ App_Web_site1.master.cdcab7d2中均存在。 muczzy9v.dll'和'c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ assembly \ dl3 \ 44c3a3cf \ 80dd34ed_6968ca01 \ WebApplication3.DLL' 前面的完整警告: 警告:CS0436:在'c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0
  • 如何从 ASP.NET 3.5 中的网页内容页面设置页面标题(How to set Page's Title from a web content page in ASP.NET 3.5)
    问题 我已经阅读了很多关于如何做到这一点的帖子/文章,但我仍然没有从内容页面获得页面标题设置。 我的页面呈现正常,但我无法从内容页面获取标题集(所有页面的标题都按照母版页设置)。 这是我的母版页的代码隐藏: Partial Class zSEO Inherits System.Web.UI.MasterPage Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Page.Header.Title = "Dynamically set in Master page" End Sub End Class 这是母版页的其余部分: <%@ Master Language="VB" EnableTheming="true" Inherits="zSEO" CodeFile="zSEO.master.vb" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
  • ASP.NET MVC-查看母版页,如何设置标题?(ASP.NET MVC - View with master page, how to set title?)
    问题 使用母版页时,为视图设置html标题(顶部)的首选方法是什么? 一种方法是在.aspx文件中使用Page.Title,但这在母版页中可能会与HTML代码混淆。 因此,假设没有服务器端控件,只有纯HTML。 还有更好的主意吗? 更新:我想在控制器或模型中不在视图中设置标题。 回答1 在母版页中,我们创建了一个“ init” ContentPlaceHolder和一个“ title” ContentPlaceHolder。 如果有人想以编程方式设置Page.Title,则可以在CSharp中的init占位符中进行设置,也可以使用标签覆盖“ title”占位符。 母版页 <asp:ContentPlaceHolder id="init" runat="server"></asp:ContentPlaceHolder> <head runat="server"> <asp:ContentPlaceHolder ID="title" runat="server"> <title><%=this.Page.Title%></title> </asp:ContentPlaceHolder> </head> 查看页面可以覆盖整个“标题”内容占位符: <asp:Content ID="Content1" ContentPlaceHolderID="title" runat="server">
  • 解析器错误:此处不允许使用“ _Default”,因为它不会扩展类“ System.Web.UI.Page”和MasterType声明(Parser Error: '_Default' is not allowed here because it does not extend class 'System.Web.UI.Page' & MasterType declaration)
    问题 我最近在Visual Studio 2008中将一个网站项目转换为一个Web应用程序项目。我终于将其编译,并且第一页(登录屏幕)正常显示,但是当它重定向到Default.aspx页时,我收到了一个错误: Parser Error Message: 'SOME.NAMESPACE.MyApplicationName.WebApplication._Default' is not allowed here because it does not extend class 'System.Web.UI.Page'. 我所有的页面都继承自一个名为“ BasePage”的类,该类扩展了System.Web.UI.Page。 显然,问题不在那个类上,因为login.aspx页面显示没有错误,并且它也继承自该基页。 该网站上的所有页面(包括登录页面)都是母版页的子级。 经过一些测试,我确定了导致错误的原因(尽管我不知道为什么会这样)。 在具有以下标记的所有页面上,不会发生此错误。 <%@ MasterType VirtualPath="~/MasterPages/MainMaster.master" %> 在所有不包含该行的页面上,都会发生错误。 这遍及整个应用程序。 我只有在需要引用MasterPage上的控件的页面上才有标签。 所以,我想我只是将这一行添加到我的所有页面上并完成它。
  • 在 contentplaceholder 中添加标题会添加第二个空标题标签(Adding title in contentplaceholder adds second empty title tag)
    问题 我的母版页在 head 标签中有一个内容占位符。 因为我希望我的页面标题代表当前页面的功能,并且因为我希望将标题翻译成用户的语言,所以我在页面头部的内容占位符中添加了一个标题标签。 除了现在出现第二个空标题标签之外,一切都很好,当然这是无效的。 任何想法如何解决这个问题? 回答1 我遇到了同样的问题,并找到了一个似乎有效的解决方案。 这很hacky,但同时也很简单。 只需在头部添加另一个标题标签,在其中放置一个 runat="server" 属性,然后将其可见性设置为 false: <title visible="false" runat="server"><%-- hack to turn the auto title off --%></title> 回答2 根据 W3C 规范: 每个 HTML 文档的 HEAD 部分都必须有一个 TITLE 元素。 因此,ASP.Net 平台符合标准并向您的页面添加一个空的标题标签以帮助您实现有效标记——它不知道您将通过内容占位符添加一个。 在经典的 ASP.Net 下,您的选择是: 使用@page 指令 Title 来设置这个标签的内容使用后面代码中的 Page.Title 属性以编程方式设置值。 如果您使用的是 ASP.Net MVC,则默认 Site.Master 文件具有以下默认文本: <title><%= Html
  • Page losing title after UpdatePanel asyncpostback
    I have just noticed recently that my page title will reset to the standard "Untitled Page" after I perform an asyncpostback from inside my UpdatePanel in the main page. The title will not be lost during a postback from inside the master page (such as when I click on the search box button inside the master page). I assumed that by using a different contentplaceholder specifically for setting the document title I was going to avoid issues like this, but apparently I was wrong. Is there something else I am missing other than having to explicitly set the title in the code-behind of the ASPX page
  • 如何在 ASP.NET MVC 区域中使用 Web 窗体中的母版页(How to use Master Page from Web Forms in ASP.NET MVC Area)
    问题 我已将 MVC 区域添加到现有的 Web 窗体项目中。 我想在 MVC 项目的所有视图中使用母版页。 我不明白我应该如何引用 MVC 区域内的 WebForms 的 MasterPage。 我读过这两篇文章: http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx http://www.eworldui.net/blog/post/2011/01/07/Using-Razor-Pages-with-WebForms-Master-Pages.aspx 我在控制器文件夹中添加了一个控制器扩展类。 public static class ControllerExtensions { public static ViewResult RazorView(this Controller controller) { return RazorView(controller, null, null); } public static ViewResult RazorView(this Controller controller, object model) { return RazorView(controller, null, model); } public
  • How to use Master Page from Web Forms in ASP.NET MVC Area
    I have added an MVC Area to an existing Web Forms project. I want to use the Master Page in all of the views for the MVC project. I don't understand how I am supposed to reference the MasterPage for the WebForms inside the MVC Area. I have read these two articles: http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx http://www.eworldui.net/blog/post/2011/01/07/Using-Razor-Pages-with-WebForms-Master-Pages.aspx I have added a controller extensions class inside the controllers folder. public static class ControllerExtensions { public static ViewResult RazorView
  • jquery tabs and asp.net master pages issue
    i have a website with master pages and content pages. the code for master page is: <%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Site.master.vb" Inherits="ProjectX1.Site" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <asp:ContentPlaceHolder ID="head" runat="server"> </asp:ContentPlaceHolder> <link href="css/style.css" rel="stylesheet" type="text/css" /> <link href="css/ui-lightness/jquery-ui-1.8.18.custom.css" rel=
  • 用户选择时如何将导航栏项目设置为活动状态?(How to set navbar item as active when user selects it?)
    问题 我是一名新的 ASP.NET Web 窗体开发人员,并尝试将 Twitter Bootstrap 与母版页一起使用。 当用户选择它时,我正在努力将导航栏项目设置为活动状态。 我按照有关如何在 ASP.NET 中使用 Twitter Bootstrap 的教程创建了我的简单母版页。 这是我的母版页的代码: <%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <link href="css/bootstrap.css" rel="stylesheet" type="text/css" /> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div> <div class="container"> <div class="row-fluid"> <div class="span12"
  • ScriptManager必须出现在需要它的任何控件之前(The ScriptManager must appear before any controls that need it)
    问题 我创建了一个新的ASP.NET Web应用程序,并且在调试后出现了服务器错误 ID为“ WaitingPopup1”的控件需要页面上的ScriptManager。 ScriptManager必须出现在需要它的任何控件之前。 我是ASP.NET的新手,所以我应该将ScriptManager安装在web.config中的哪个位置? 回答1 ScriptManager是需要添加到您创建的页面的ScriptManager 。 看一下这个示例AJAX应用程序。 <body> <form runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> ... </form> </body> 回答2 如果您在页面上使用microsoft ajax,则需要将脚本管理器控件添加到母版页或需要它的页面。 它管理ASP.NET Ajax脚本库和脚本文件,部分页面呈现以及用于Web和应用程序服务的客户端代理类的生成 <asp:ScriptManager ID="ScriptManger1" runat="Server"> </asp:ScriptManager> 充分利用 <asp:ScriptManager AllowCustomErrorsRedirect="True|False
  • 在ASP.NET MVC的母版页中使用脚本(Using scripts in a master page with ASP.NET MVC)
    问题 我对ASP.NET MVC相当陌生,并且在脚本方面遇到了一些麻烦……特别是,我想在大多数页面中使用jQuery,因此将其放在母版页中是很有意义的。 但是,如果我这样做(从我的~/Views/Shared/Site.Master ): <script src="../../Scripts/jquery-1.2.6.js" type="text/javascript"></script> 然后,这实际上就是客户的问题-当然,只有当我们当前的路线碰巧具有正确的级别数时,这才起作用。 以~/Scripts/...开头不起作用。 以/Scripts/...开头只能在项目位于站点根目录(我不想假设)的情况下使用。 我有一种可行的方法(我将在下面发布)-但是:我遗漏了什么吗? 我宁愿不必使用脚本管理器,因为这似乎破坏了ASP.NET MVC模型的简单性……还是我太担心了? 这是我使其工作的方法,它也适用于非平凡的虚拟机-但似乎过于复杂: <script src="<%=Url.Content("~/Scripts/jquery-1.2.6.js")%>" type="text/javascript"></script> 回答1 我有一个AppHelper类,其中包含一些用于添加脚本引用的方法: public static string ReferenceScript(string
  • 如何将 ASP.NET 母版页存储在公共库中?(How to store an ASP.NET master page in a common library?)
    问题 我们希望有几个使用相同母版页的内部 Web 应用程序。 有没有办法将母版页存储在所有项目引用的公共库中? 回答1 您可以这样做,但它很困难并且有很多缺点。 此过程也类似于打包用户控件。 基本上,您有一个包含母版页的 Web 应用程序项目。 您可以使用 aspnet_compiler 将其预编译为一组 dll。 然后您可以使用 ilmerge.exe 将它们全部放入一个单独的 dll 中,然后您可以从其他项目中引用该 dll。 您仍然需要有标记才能让您的页面在设计器中正确呈现,因此您可能还需要调查 VirtualPathProviders。 这是一个笨拙的解决方案,并且有很多缺点。 回答2 我听说这有效,我还没有测试过。 创建一个单独的项目来容纳您的母版页,因为所有母版页都类似于用户控件并内置于它们自己的单独程序集中。 运行构建并尝试引用母版页的程序集。 同样,没有经过测试,只是我以前读过的东西。 祝你好运! 回答3 鉴于这些模块是同一个 Web 应用程序的一部分,您应该看看这种方法: 基本上,您有一个根 Web,它被设置为(唯一的)IIS Web 应用程序。 您可以通过创建 ASP.NET Web 应用程序项目插入新的 Web 模块,并将其放置在根 Web 下。 将构建目录设置为 root web 的 bin,例如。 “..\bin”。 不要创建 IIS 应用程序/虚拟目录。
  • 更改导航ID以突出显示当前页面ASP.NET的编程解决方案(Programmatic solution to change navigation id to highlight current page ASP.NET)
    问题 我正在使用Visual Studio 2008和ASP.NET 3.5编写网站。 我设置了一个母版页,以简化布局并保留内容页面的内容,而不是内容和布局。 导航是列表,css使其看起来像一个栏。 为了突出显示栏上的页面,列表项需要看起来像这样<li id="current"> 。 如果可以避免,我不想使用<asp:ContentPlaceHolder> 。 是否可以将某些代码添加到我的每个页面(或仅添加到母版页面?)来完成此操作,还是我被困在<asp:ContentPlaceHolder>的代码上? 回答1 将一个属性添加到您的母版页称为页面节 public string PageSection { get; set; } 将MasterType页面指令添加到内容页面的顶部 <%@ MasterType VirtualPath="~/foo.master" %> 在后面的内容页面代码中,设置母版页的PageSection属性 Master.PageSection = "home"; 在您的母版页中,将body标签作为服务器标签 <body ID="bodyTag" runat="server"> 在后面的母版页代码中,使用该属性在body标签上设置一个类 bodyTag.Attributes.Add("class", this.PageSection)
  • 在Asp.Net中以编程方式添加StyleSheets(Adding StyleSheets Programmatically in Asp.Net)
    问题 我想在头部分中以编程方式添加StyleSheets,但我看到的示例之一似乎需要多行代码才能仅添加一个样式表,即使我可能需要很多: 示例代码: HtmlLink css = new HtmlLink(); css.Href = "css/fancyforms.css"; css.Attributes["rel"] = "stylesheet"; css.Attributes["type"] = "text/css"; css.Attributes["media"] = "all"; Page.Header.Controls.Add(css); 我也使用Page.Header.RenderControl()方法,但是它也不起作用。 对象null抛出了错误。 我还使用了Page.Header.InnerHtml和InnerText += "<link .... "/>东西,但是它们抛出了Literal错误,这是我认为的常见错误。 我用下面的代码: List<Literal> cssFiles = new List<Literal>(); cssFiles.Add(new Literal() { Text = @"<link href=""" + ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") + @"""