ASP.Net MVC上的母版页上的标题

时间:2010-01-11 07:19:57

标签: asp.net asp.net-mvc page-title

要管理页面上的页面标题,我有一个母版页,我正在使用ContentPlaceHolder。

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

在我写的每一页上

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">Some Title Here
</asp:Content>

现在我的客户要求我删除所有页面上的标题并将其保留在母版页上但不删除所有页面和母版页上的内容占位符代码,这样以后如果有任何要求,我们就可以将数据插入到它们中。 所以我的问题是没有在母版页和页面上删除它们我无法将标题放在母版页上。所以我该如何处理这种情况呢?

5 个答案:

答案 0 :(得分:2)

谢谢大家......我得到了解决方案

如果要在母版页中设置标题的一部分。例如,您可能希望每个页面的标题以后缀“ - MySite”结尾。

如果你试试这个(请注意 - MySite加上):

<%@ Master ... %>
<html>
<head runat="server">
  <title>
    <asp:ContentPlaceHolder ID="titleContent" runat="server" /> - MySite
  </title>
</head>

运行页面,你会发现 - MySite没有渲染。这似乎是HtmlHead控件的一个怪癖。这是因为HtmlHead控件中的title标签现在本身就是一个控件。

修复非常简单。像这样将文本添加到LiteralControl。

<%@ Master ... %>
<html>
<head runat="server">
  <title>
    <asp:ContentPlaceHolder ID="titleContent" runat="server" /> 
    <asp:Literalrunat="server" Text=" - MySite" />
  </title>
</head>

答案 1 :(得分:1)

如果您想要一个好的解决方案来覆盖页面标题:

创建一个继承自System.Web.Mvc.ViewPage。

的类

让您的视图页面继承自该类:

在新类中编写一个Page_Load处理程序,执行以下操作:

Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
   Me.Title = "Company Name | " + Page.Title
End Sub

您也不需要内容占位符来更改标题。 &lt; head&gt; tag已经是一个runat服务器控件。在页面加载(或早期事件)中设置Page.Title工作正常。

您也可以在母版页中放置一个runat服务器脚本标记来完成此任务。

答案 2 :(得分:0)

最简单的方法:

将当前ContentPlaceHolder移动到HTML,并将其包装在<asp:PlaceHolder runat="server" visible="false"/>中。如果您稍后需要它,只需再次移回ContentPlaceHolder。

答案 3 :(得分:-1)

使用母版页上的OnPreRender事件设置标题,覆盖每页上设置的内容。

答案 4 :(得分:-1)

为什么不将属性Visible = false添加到母版页的ContentPlaceHolder

我认为这是处理您情况的最简单方法。

快乐的编码。